itext7 CopyPagesTo 不打开 PDF

发布于 2025-01-18 17:57:12 字数 1274 浏览 0 评论 0原文

我正在尝试将封面 PDF 文件添加到另一个 PDF 文件中。我正在使用 CopyPagesTo 方法。 CoverPageFilePath 将位于 pdfDocumentFile 中的任何页面之前。然后我需要将该新文件重写到同一位置。当我运行代码并打开新的 pdf 文件时,出现有关文件已损坏的错误。

 public static void iText7MergePDF()
        {
            byte[] modifiedPdfInBytes = null;
            string pdfCoverPageFilePath = @"PathtoCoverPage\Cover Page.pdf";
            PdfDocument pdfDocumentCover = new PdfDocument(new iText.Kernel.Pdf.PdfReader(pdfCoverPageFilePath));
            string pdfDocumentFile =@"PathtoFullDocument.pdf";
            var buffer = File.ReadAllBytes(pdfDocumentFile);
            using (var originalPdfStream = new MemoryStream(buffer))
            using (var modifiedPdfStream = new MemoryStream())
            {
                var pdfReader = new iText.Kernel.Pdf.PdfReader(originalPdfStream);
                var pdfDocument = new PdfDocument(pdfReader, new PdfWriter(modifiedPdfStream));
                int numberOfPages = pdfDocumentCover.GetNumberOfPages();
                pdfDocumentCover.CopyPagesTo(1, numberOfPages, pdfDocument);
                modifiedPdfInBytes = modifiedPdfStream.ToArray();
                pdfDocument.Close();
            }
            System.IO.File.WriteAllBytes(pdfGL, modifiedPdfInBytes);
        }

I am trying to add a Cover Page PDF file to another PDF file. I am using CopyPagesTo method. CoverPageFilePath will go before any pages in the pdfDocumentFile. I then need to rewrite that new file to the same location. When I run the code and open the new pdf file I get an error about it being damaged.

 public static void iText7MergePDF()
        {
            byte[] modifiedPdfInBytes = null;
            string pdfCoverPageFilePath = @"PathtoCoverPage\Cover Page.pdf";
            PdfDocument pdfDocumentCover = new PdfDocument(new iText.Kernel.Pdf.PdfReader(pdfCoverPageFilePath));
            string pdfDocumentFile =@"PathtoFullDocument.pdf";
            var buffer = File.ReadAllBytes(pdfDocumentFile);
            using (var originalPdfStream = new MemoryStream(buffer))
            using (var modifiedPdfStream = new MemoryStream())
            {
                var pdfReader = new iText.Kernel.Pdf.PdfReader(originalPdfStream);
                var pdfDocument = new PdfDocument(pdfReader, new PdfWriter(modifiedPdfStream));
                int numberOfPages = pdfDocumentCover.GetNumberOfPages();
                pdfDocumentCover.CopyPagesTo(1, numberOfPages, pdfDocument);
                modifiedPdfInBytes = modifiedPdfStream.ToArray();
                pdfDocument.Close();
            }
            System.IO.File.WriteAllBytes(pdfGL, modifiedPdfInBytes);
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你是暖光i 2025-01-25 17:57:12

每当您有其他类型(例如 StreamWriter)或这里的 PdfWriter 写入流时,它可能不会立即将所有数据写入流。

在这里,您关闭 pdfDocument,以便将所有数据写入 MemoryStream。

即这

modifiedPdfInBytes = modifiedPdfStream.ToArray();
pdfDocument.Close();

应该是

pdfDocument.Close();
modifiedPdfInBytes = modifiedPdfStream.ToArray();

Whenever you have some other type, like a StreamWriter, or here a PdfWriter writing to a Stream, it may not write all the data to the Stream immediately.

Here you Close the pdfDocument for all the data to be written to the MemoryStream.

ie this

modifiedPdfInBytes = modifiedPdfStream.ToArray();
pdfDocument.Close();

Should be

pdfDocument.Close();
modifiedPdfInBytes = modifiedPdfStream.ToArray();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文