using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
namespace iTextTools {
public class PdfExtractorUtility {
} }
//方法一:从已有pdf中拷贝指定的页码范围到一个新的pdf文件中:
//1、使用pdfCopyProvider.AddPage()方法
public void ExtractPages(string sourcePdfPath,string outputPdfPath,int startPage,int endPage){
PdfReader reader = null;
Document sourceDocument = null;
PdfCopy pdfCopyProvider = null;
PdfImportedPage importedPage = null;
try {
reader = new PdfReader(sourcePdfPath);
sourceDocument = new Document(reader.GetPageSizeWithRotation(startPage)); pdfCopyProvider = new PdfCopy(sourceDocument,new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create));
sourceDocument.Open();
for (int i = startPage; i <= endPage; i++) {
importedPage = pdfCopyProvider.GetImportedPage(reader, i); pdfCopyProvider.AddPage(importedPage);
}
sourceDocument.Close();
reader.Close();
} catch (Exception ex) { throw ex; } }
2、使用 AddTemplate()方法
private void copypdf(int StartPage, int EndPage, string file1, string splitFileName)
//将file1中页码StartPage到EndPage的文件拷贝至splitFileName { iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(file1); Document document = new Document(reader.GetPageSizeWithRotation(StartPage));
//创建document对象
// string splitFileName = "D:\itextsharp_例子\split_pdf_ceshi4.pdf";
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(splitFileName, FileMode.Create)); //实例化document对象
document.Open();
int rotation;
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page; // for (int i = 1; i <= startPage; i++) while (StartPage <= EndPage) {
document.SetPageSize(reader.GetPageSizeWithRotation(StartPage)); document.NewPage();
page = writer.GetImportedPage(reader, StartPage);
rotation = reader.GetPageRotation(StartPage);
if (rotation == 90 || rotation == 270) { //document.NewPage();
if (rotation == 90){
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(StartPage).Height);
}
if (rotation == 270){
cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(StartPage).Width, 0);
}
}else{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
StartPage++;
}
try{
document.Close();
reader = null;
}catch (Exception ex){
MessageBox.Show(ex.Message.ToString()); } }
二、将已有pdf文件中 不连续 的页拷贝至新的pdf文件中。其中需要拷贝的页码存于数组 int[] extractThesePages中
public void ExtractPages(string sourcePdfPath,string outputPdfPath, int[] extractThesePages) {
PdfReader reader = null;
Document sourceDocument = null;
PdfCopy pdfCopyProvider = null;
PdfImportedPage importedPage = null;
try {
reader = new PdfReader(sourcePdfPath);
sourceDocument = new Document(reader.GetPageSizeWithRotation(extractThesePages[0])); pdfCopyProvider = new PdfCopy(sourceDocument,new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create));
sourceDocument.Open();
foreach (int pageNumber in extractThesePages){
importedPage = pdfCopyProvider.GetImportedPage(reader, pageNumber); pdfCopyProvider.AddPage(importedPage); }
sourceDocument.Close();
reader.Close();
}catch (Exception ex){
throw ex;
}
}