【问题标题】:How to split PDF document into small ones如何将PDF文件拆分成小文件
【发布时间】:2018-09-30 12:06:02
【问题描述】:

我需要将一个文档拆分为几个小文档。例如,如果文档有 7 页,我需要生成 7 个 pdf。

在 iTextSharp 中,我使用了以下代码,效果很好。但是,在 iText 7 中,不可能以同样的方式做到这一点。

iTextSharp 旧代码

var reader = new PdfReader(src);
for (int i = 1; i <= reader.NumberOfPages; i++)
{
    var document = new Document();
    var copy = new PdfCopy(document, new FileStream(result + i + ".pdf", FileMode.Create));
    document.Open();
    copy.AddPage(copy.GetImportedPage(reader, i));
    document.Close();
}

iText 7,但不工作

第一个问题
我发现有 PdfSplitter,它可以将我的 pdf 拆分为小 pdf。然而,即使我的测试 pdf 有 7 页,即使GetNumberOfPages() 返回数字 7,拆分文档的数量也只有一个。

在这个linked documenation 中以某种方式展示了如何拆分文档。但是,我不知道如何制作与提到的类似的方法 - getNextPdfWriter

第二个问题
即使我有一个文件,它也是空的。我想知道如何设置正确的作家来创建正确的 pdf。分别如何设置阅读器,以便阅读拆分后的文档内容。

string result = outputPath + @"/page00";
using (pdfDocument = new PdfDocument(new PdfReader(pdfPath)))
{

    var splitter = new PdfSplitter(pdfDocument);
    var splittedDocs = splitter.SplitByPageCount(pdfDocument.GetNumberOfPages());

    for (int i = 0; i < pdfDocument.GetNumberOfPages(); i++)
    {
        //how to set reader to read the content of splitted docs. Or how to set writer for splitted doc.
        var pdfDoc = new PdfDocument(new PdfWriter(new FileStream(result + i + ".pdf", FileMode.Create)));
        pdfDoc.Close();
        splittedDocs[i].Close();
    }
}

问题

如何在 .NET 核心中使用 iText 7 正确地将文档拆分为小文档

【问题讨论】:

    标签: c# pdf .net-core itext itext7


    【解决方案1】:

    嗯,这很容易。根据链接的文档,我做了以下事情:

    创建自定义拆分器覆盖 PdfSplitter 的功能。

    class CustomSplitter : PdfSplitter
    {
          private int _order;
          private readonly string _destinationFolder;
        
          public CustomSplitter(PdfDocument pdfDocument, string destinationFolder) : base(pdfDocument)
          {
              _destinationFolder = destinationFolder;
              _order = 0;
          }
        
          protected override PdfWriter GetNextPdfWriter(PageRange documentPageRange)
          {
               return new PdfWriter(_destinationFolder + "splitDocument1_" +  _order++ + ".pdf");
          }
    }
    

    然后只需使用它来拆分 PDF 文档。不要忘记关闭拆分的文档。我想指出一件事。 SplitByPageCount - 它需要根据应该拆分的数字。 SplitByPageCount(1) 将 PDF 文档拆分一页。我真的误解了这个方法。

    using (var pdfDoc = new PdfDocument(new PdfReader("doc.pdf")))
    {
         var outputDir = @"C:\";
         var splitter = new CustomSplitter(pdfDoc, outputDir);
         var splittedDocs = splitter.SplitByPageCount(1);
    
         foreach (var splittedDoc in splittedDocs)
         {
             splittedDoc.Close();
         }
    }
    

    结果是几个 pdf。

    【讨论】:

    • +1 在SplitByPageCount(1) 上也让我失望。我错误地认为它想要在源 PDF 中拆分多少页。我错了,幸好你让我头疼!
    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多