C# iText7-将页面从PDF文档复制到另一个文档并写入MemoryStream
我有两个html字符串,我试图将它们都写入两个memoryStream,然后将一个pdfDocument和CopyPages读取到另一个pdfDocument,最后返回memoryStream和组合文档C# iText7-将页面从PDF文档复制到另一个文档并写入MemoryStream,c#,itext,itext7,C#,Itext,Itext7,我有两个html字符串,我试图将它们都写入两个memoryStream,然后将一个pdfDocument和CopyPages读取到另一个pdfDocument,最后返回memoryStream和组合文档 { string Document = "<p>Hello to All</p>"; string newPage = "<p>Additional Page</p>"; var mainStream = new Memor
{
string Document = "<p>Hello to All</p>";
string newPage = "<p>Additional Page</p>";
var mainStream = new MemoryStream();
using (PdfWriter pdfWriter = new PdfWriter(mainStream))
{
pdfWriter.SetCloseStream(false);
using (var document = HtmlConverter.ConvertToDocument(Document, pdfWriter)) { }
}
mainStream.Position = 0;
var newPageStream = new MemoryStream();
using (PdfWriter pdfWriter1 = new PdfWriter(newPageStream))
{
pdfWriter1.SetCloseStream(false);
using (var document = HtmlConverter.ConvertToDocument(newPage, pdfWriter1)) { }
};
mainStream = addNewPage(mainStream, newPageStream);
return mainStream;
}
你的问题是什么?你在
addNewPage
的maintal
中既在写新东西,也在读以前的东西,这可能很棘手。特别是,在用新内容覆盖之前,必须先阅读旧内容。另一方面,您首先创建一个PdfWriter编写器
,用于对其进行写入(这可能会覆盖某些现有内容),然后创建一个PdfReader阅读器
,用于读取原始内容。这是行不通的。此外,您可以对两个不同的PdfDocument
实例使用writer
。这也行不通。
public static MemoryStream addNewPage(MemoryStream mainStream, MemoryStream newPageStream)
{
PdfWriter writer = new PdfWriter(mainStream);
PdfDocument pdfDoc = new PdfDocument(writer);
pdfDoc.InitializeOutlines();
PdfDocument addedDoc = new PdfDocument(new PdfReader(newPageStream));
addedDoc.CopyPagesTo(1, addedDoc.GetNumberOfPages(), pdfDoc);
mainStream.Position = 0;
using (PdfReader reader = new PdfReader(mainStream))
{
writer.SetCloseStream(false);
using (pdfDoc = new PdfDocument(reader, writer))
{
int z = pdfDoc.GetNumberOfPages();
}
}
addedDoc.Close();
return mainStream;
}