搜档网
当前位置:搜档网 › C# 使用 itextsharp 对pdf文件进行分割的几种方法(1)——按页码拷贝分割

C# 使用 itextsharp 对pdf文件进行分割的几种方法(1)——按页码拷贝分割

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; } }

相关主题