当前位置: 首页 > 知识库问答 >
问题:

如何将PDF文档拆分成小文档

巢宏富
2023-03-14

我需要把一个文件分成几个小文件。例如,如果文档有7页,我需要生成7个PDF。

在iTextSharp中,我使用了以下代码,运行得非常好。然而,在iText 7中,不可能以同样的方式进行。

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

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

在这个链接文档中,以某种方式展示了如何拆分文档。然而,我不知道如何使用与前面提到的方法类似的方法-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

共有1个答案

郜昊苍
2023-03-14

嗯,这很简单。根据链接留档,我做了以下操作:

创建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。

 类似资料:
  • 我正在尝试将一个PDF文档拆分为多个文档,其中每个文档包含的最大页数小于最大文件大小。 我的代码目前可以在Eclipse上运行,但是当我点击. jar文件时,java类中的静态方法似乎崩溃了(但是我似乎抓不到异常)。 不工作的代码是: myListOfDocuments=mysplitter。拆分(文件); 在调用上述行时,JVM会以某种方式退出静态方法。加载似乎工作正常,如下所示:PDDocum

  • 在上一章中,我们已经了解了如何将JavaScript添加到PDF文档中。 现在让我们学习如何将给定的PDF文档拆分成多个文档。 拆分PDF文档中的页面 您可以使用名为Splitter的类将给定的PDF文档拆分为多个PDF文档。 此类用于将给定的PDF文档拆分为多个其他文档。 以下是拆分现有PDF文档的步骤 第1步:加载现有PDF文档 使用PDDocument类的静态方法load()加载现有PDF文

  • 问题内容: 我想使用命令 将一个PDF拆分为许多其他PDF。但是我发现有一个问题:拆分的PDF为“ ActiveMQ In Action(Manning-2011).pdf”,它的大小为14.1MB。但是当我跑步时 每个PDF都大于79MB!我该如何预防? 问题答案: 这是PDFBox 2.0.2中的一个已知错误。拆分在2.0.1中工作正常,在2.0.3中又可以工作。“错误的”代码已经恢复。问题的

  • 我面临以下用例: 我收到一个包含许多文档的pdf。每个文档具有不同的页数。它们由条形码页分隔。 是否可以拆分包含多个文档的多页PDF,这些文档由带有条形码的页面分隔,并为每个文档创建一个新的PDF? 我听说我们可以用Itext:https://developers.itextpdf.com/examples/stamping-content-existing-pdfs/clone-splittin

  • 问题内容: 如何将Word文档转换为PDF,其中文档包含各种内容,例如表格。尝试使用iText时,原始文档看起来与转换后的PDF不同。有没有我可以使用的开源API /库,而不是调用可执行文件? 问题答案: 这是一项艰巨的任务,如果您想要完美的结果(如果不使用Word则不可能),则难度就更大了,因为仅使用纯Java即可为您完成所有操作且都是开源的API数量为零,我相信( 更新:我错了,请参见下文 )

  • 主要内容:分割PDF文档中的页面,示例在前一章中,我们已经看到了如何将JavaScript添加到PDF文档。 现在来学习如何将给定的PDF文档分成多个文档。 分割PDF文档中的页面 可以使用类将给定的PDF文档分割为多个PDF文档。 该类用于将给定的PDF文档分成几个其他文档。 以下是拆分现有PDF文档的步骤 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态方法,可