C#使用itextsharp对pdf文件进行分割的几种方法

来源:互联网 发布:织梦cms模板更改首页 编辑:程序博客网 时间:2024/05/21 22:53
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;

}
阅读全文
0 0
原创粉丝点击