C# iText7-将页面从PDF文档复制到另一个文档并写入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

我有两个html字符串,我试图将它们都写入两个memoryStream,然后将一个pdfDocument和CopyPages读取到另一个pdfDocument,最后返回memoryStream和组合文档

{
    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;
}