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

时间:2018-04-19 21:13:40

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

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

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

问题

  

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

1 个答案:

答案 0 :(得分: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。

相关问题