我有四个要合并的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,因为不同的部分是从不同的资源构建的。所以我引用了这些内存流。
如何做到这一点?
答案 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());