将内存流合并到一个iText文档

时间:2011-12-05 12:59:04

标签: c#-4.0 merge itext memorystream

我有四个要合并的MemoryStream数据,然后打开pdfDocument,而不创建单个文件。

可以将它们写到文件中然后合并它们但这样做会很糟糕,这也会导致一些问题,所以我想避免这种情况。

但是,我找不到将MemoryStreams与iText5 for .NET合并的方法。

现在,这就是我使用文件的方式:

    private static void ConcatenateDocuments()
    {
        var stream = new MemoryStream();

        var readerFrontPage = new PdfReader(Folder + FrontPageName);
        var readerDocA = new PdfReader(Folder + docA);
        var readerDocB = new PdfReader(Folder + DocB);
        var readerAppendix = new PdfReader(Folder + Appendix);
        var pdfCopyFields = new PdfCopyFields(stream);

        pdfCopyFields.AddDocument(readerFrontPage);
        pdfCopyFields.AddDocument(readerDocA );
        pdfCopyFields.AddDocument(readerDocB);
        pdfCopyFields.AddDocument(readerAppendix);
        pdfCopyFields.Close();

        SavePdf(stream, FilenameReport);
    }

由于我需要删除文件的使用,因此我保留了MemoryStream,因为不同的部分是从不同的资源构建的。所以我引用了这些内存流。

如何做到这一点?

2 个答案:

答案 0 :(得分:19)

在这种情况下,可以通过将流PDF header signature not found设置回Position来修复错误0。由于您未收到错误Cannot access a closed Stream,我假设您已将PdfWriter的{​​{1}}设置为CloseStream

以下是针对iTextSharp 5.1.1.0的全功能C#2010 WinForm应用,可在false中创建三个PDF并将它们组合在一起。由于我没有方便的网络服务器,我正在将它们写入磁盘。

MemoryStreams

答案 1 :(得分:0)

当接缝PdfReader无法接收流时,流的数组可以工作。

var readerFrontPage = new PdfReader(streamFrontPage.ToArray());