iText 7 和 C# 从 MemoryStream 写入 PDF 文件?

iText 7 and C# writing a PDF file from MemoryStream?

我有一个在 MemoryStream 中创建的 PDF 文档(使用 iText 7/C# 4.01),最后,我想将它写到一个文件中。我在内存流中创建它的部分原因是我想在最后标记页眉 table 和页脚,并希望避免将其写入文件然后读回文件,标记,然后写出一个新文件(就像我一直在 iText 网站上找到的例子一样)。但是,我似乎在下面的代码中遇到了某种 chicken/egg 场景。似乎您必须 Close() 文档才能使 iText 完全形成它。但是,如果我 Close() 它,那么在尝试编写它时我会得到一个 ObjectDisposedException (下面的简化示例)。我必须在这里遗漏一些简单的东西,对吗?谢谢

    MemoryStream baos = new MemoryStream();
    PdfWriter writer = new PdfWriter(baos);
    PdfDocument pdfDocument = new PdfDocument(writer.SetSmartMode(true));
    //writer.SetCloseStream(true);
    //pdfDocument.SetCloseWriter(true);
    //pdfDocument.SetCloseReader(true);
    //pdfDocument.SetFlushUnusedObjects(true);
    Document d = new Document(pdfDocument, iText.Kernel.Geom.PageSize.LETTER);
    d.Add(new Paragraph("Hello world!"));
    //d.Close();

    FileStream file = new FileStream("C:\test.pdf", 
    FileMode.Create, FileAccess.Write);
    baos. WriteTo(file);
    file.Close();
    //baos.Close();
    //d.Close();

试试这个

我没有 IDE 进行测试,但我认为这行得通

MemoryStream baos = new MemoryStream();
PdfWriter writer = new PdfWriter(baos);
PdfDocument pdfDocument = new PdfDocument(writer.SetSmartMode(true));

Document d = new Document(pdfDocument, iText.Kernel.Geom.PageSize.LETTER);
d.Add(new Paragraph("Hello world!"));

d.Close();

byte[] byte1 = baos.ToArray();
File(byte1, "application/pdf", "C:\iTextTester\test.pdf");