在 C# 上合并多个 PDF 表单

Merging several PDF forms on C#

嘿,我无法将多个 PDF 表单合并为一个。 我已经尝试使用 PDFSharp 来完成它,但它无法打开只读 pdf 表单。我已经用 pdfsharp 和他的 unethicalreading 参数进行了测试,它完成了一些工作。它合并 PDF 但删除了表单内容...(遗憾的是我错过了填写它的时间...)

这是我的代码的一些部分,也许它只是一个我没有考虑过的缺失参数...

private void MergePDFs(string outPutFilePath, params string[] filesPath)
        {
            List<PdfReader> readerList = new List<PdfReader>();
            foreach (string filePath in filesPath)
            {
                PdfReader pdfReader = new PdfReader(filePath);
                PdfReader.unethicalreading = true;
                readerList.Add(pdfReader);
            }

            Document document = new Document(PageSize.A4, 0, 0, 0, 0);
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outPutFilePath, FileMode.Create));
            document.Open();

            foreach (PdfReader reader in readerList)
            {
                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    PdfImportedPage page = writer.GetImportedPage(reader, i);
                    document.Add(iTextSharp.text.Image.GetInstance(page));
                }
            }
            document.Close();
        }

因此,如果有人知道如何合并“受修改保护”的 PDF 表单,我已准备好对其进行测试!

编辑: 在对非受保护的 PDF 表单进行一些其他测试后,它似乎不是一个保护问题。我的 MergePDFs 没有使用表单内容。

所以任务仍然是“在 C# 上合并多个 PDF 表单”

EDIT2:这是我要合并的 2 个文件。一种受 modif 保护,一种不受保护。两个都满了。 https://drop.infini.fr/r/XFt_Sd8gFc#7thQxyjeGdo8uIkXN6oys82KLB8VE0AHmflb0uYRkVM= https://drop.infini.fr/r/NUa2n2No0R#FaOAGyzk0SrTDtB6CiXUhF7WEKw0EHGHHM7gaKz20o4=

感谢@mkl 的评论,我找到了解决方案。

   private void Merge2PDFs(string outPutFilePath, params string[] filesPath)
        {
            byte[] mergedPdf = null;
            using (FileStream fs = new FileStream(outPutFilePath, FileMode.OpenOrCreate))
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    using (Document PDFdocument = new Document())
                    {
                        using (PdfCopy copy = new PdfCopy(PDFdocument, ms))
                        {
                            PDFdocument.Open();

                            foreach (string filePath in filesPath)
                            {
                                PdfReader reader = new PdfReader(filePath);
                                PdfReader.unethicalreading = true;
                                // loop over the pages in that document
                                int n = reader.NumberOfPages;
                                for (int page = 0; page < n;)
                                {
                                    copy.AddPage(copy.GetImportedPage(reader, ++page));
                                }
                            }
                        }
                    }
                    mergedPdf = ms.ToArray();
                    fs.Write(mergedPdf, 0, mergedPdf.Length);

                    fs.Close();
                }
            }
        }

实际上,我的第一个方法只复制基本文档而不是表单内容。

this post for more information