将内存流合并到一个 iText 文档
我有四个 MemoryStreams 数据,我想要合并它们,然后打开 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,因为不同的部分是从不同的资源构建的。所以我引用了这些记忆流。
这怎么能做到呢?
I have four MemoryStreams of data that I want to merge and then open the pdfDocument, without creating a single file.
It's possible to write them down to files and then merge them but that would be bad practice and that can also cause a few issues so I want to avoid that.
However, I can not find a way to merge the MemoryStreams with iText5 for .NET.
Right now, this is how I do it with files:
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);
}
Since I need to remove the use of files, I keep the MemoryStream's as the different parts are built from different resources. So I have references to these memorystreams.
How can this be done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在这种情况下,可以通过将流的
Position
设置回0
来修复找不到 PDF 标头签名
错误。由于您没有收到错误无法访问关闭的流
,我假设您已经将PdfWriter
的CloseStream
正确设置为假
。下面是一个针对 iTextSharp 5.1.1.0 的完整工作 C# 2010 WinForm 应用程序,它在
MemoryStreams
中创建三个 PDF 并将它们组合起来。由于我手边没有网络服务器,所以我将它们写入磁盘。The error
PDF header signature not found
can be fixed in this case by setting the stream'sPosition
back to0
. Since you're not getting the errorCannot access a closed Stream
I'm assuming that you are already correctly setting thePdfWriter
'sCloseStream
tofalse
.Below is a full working C# 2010 WinForm app targeting iTextSharp 5.1.1.0 that creates three PDFs in
MemoryStreams
and combines them. Since I don't have a web server handy I'm writing them to disk.虽然它接缝 PdfReader 无法获取流,但流的数组可以工作。
var readerFrontPage = new PdfReader(streamFrontPage.ToArray());
While it seams the PdfReader can not take the stream, the array of the stream works.
var readerFrontPage = new PdfReader(streamFrontPage.ToArray());