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

转载自:http://www.itdadao.com/articles/c15a163884p0.html


Set up references and Using Statements to use iTextSharp

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值