为什么我不能使用iTextSharp用此代码将PDF附加到另一个PDF?

时间:2019-10-10 20:46:54

标签: c# visual-studio pdf itext append

我正在尝试使用iTextSharp将两个PDF文件的内容合并为一个新的PDF文件。我之前曾使用PDFStamper在类似情况下完成此操作,但是由于某种原因,本次它不起作用。追加根本不起作用;该文件已创建,但在此代码块末尾,大小保持为0字节。任何人都可以提供的任何帮助将不胜感激。

File.Create(session.getLocalDir() + newPdfFile);

// pasting content from original file to new file
PdfReader reader = new PdfReader(originalFile);
string pageSelection = "1-" + reader.NumberOfPages;
reader.SelectPages(pageSelection);
PdfStamper stamper = new PdfStamper(reader, new FileStream(newPdfFile, FileMode.Append, FileAccess.Write));
stamper.Close();
reader.Close();

// pasting content from temp file to new file
reader = new PdfReader(temp);
pageSelection = "1-" + reader.NumberOfPages;
reader.SelectPages(pageSelection);
stamper = new PdfStamper(reader, new FileStream(newPdfFile, FileMode.Append, FileAccess.Write));
stamper.Close();
reader.Close();

1 个答案:

答案 0 :(得分:0)

这里最简单的解决方案是在添加临时PDF文件时使用MemoryStream来保存它。经过一些研究,我发现如mkl所示,PdfStamper类不适合此操作。在iTextSharp中,您可以使用另一种方式附加2个PDF:

        MemoryStream stream = new MemoryStream();
        PdfCopyFields copy = new PdfCopyFields(stream);


        var ms1 = new MemoryStream(File.ReadAllBytes(file1Path));
        ms1.Position = 0;
        copy.AddDocument(new PdfReader(ms1));
        ms1.Dispose();

        var ms2 = new MemoryStream(File.ReadAllBytes(file2Path));
        ms2.Position = 0;
        copy.AddDocument(new PdfReader(ms2));
        ms2.Dispose();
        copy.Close();

生成的'stream'变量包含合并的PDF,可以使用PdfStamper写入文件。

如果可以选择将.net切换到iText 7,则可以省略PdfStamper,而可以使用PdfDocument.copyPagesTo()方法。

一个简单的示例(使用iText 7 for .net):

    MemoryStream stream = new MemoryStream();
    PdfDocument outputDocument = new PdfDocument(new PdfWriter(stream));
    PdfDocument pdfSource = new PdfDocument(new PdfReader("c:\\firstInput.pdf"));

    pdfSource.CopyPagesTo(1, pdfSource.GetNumberOfPages(), outputDocument);
    pdfSource = new PdfDocument(new PdfReader("c:\\secondInput.pdf"));
    pdfSource.CopyPagesTo(1, pdfSource.GetNumberOfPages(), outputDocument);
    pdfSource.Close();
    outputDocument.Close();

    MemoryStream outputStream = new MemoryStream(stream.ToArray());
    outputDocument = new PdfDocument(new PdfReader(outputStream), new PdfWriter("c:\\result.pdf"));

第二次编辑了针对特定用例的解决方案。