当前位置: 首页 > 知识库问答 >
问题:

在C#上合并多个PDF表单

闻人越
2023-03-14

嗨,我被困在将几个PDF表单合并在一个一个中。我已经尝试使用PDF格式执行此操作,但它无法打开只读的PDF表单。我已经用pdfsharp和他的不道德的参数进行了测试,它做了一些工作。它合并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表单进行其他一些测试后,它似乎不是保护问题。我的合并DF不使用表单内容。

因此,任务仍然是“在C#上合并多个PDF表单”

编辑2:这里有两个我想合并的文件。一个是修改保护的,一个没有。两个都被填充了。https://drop.infini.fr/r/XFt_Sd8gFc#7thQxyjeGdo8uIkXN6oys82KLB8VE0AHmflb0uYRkVM=https://drop.infini.fr/r/NUa2n2No0R#FaOAGyzk0SrTDtB6CiXUhF7WEKw0EHGHHM7gaKz20o4=

共有1个答案

乜元魁
2023-03-14

感谢评论里的@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();
                }
            }
        }

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

这篇文章了解更多信息

 类似资料:
  • 在这里,我想合并两个单独的A4 PDF到A3 PDF。A4 PDF页面应适合并排查看的A3 2-ups。 我现在还没有尝试过任何代码,但在我想知道这是否可能之前? 注意:A4 PDF可以有“N”个页数,而不是单页PDF。 以下是图形图像示例:

  • 主要内容:合并多个PDF文档,示例在前一章中,我们已经看到如何将给定的PDF文档分成多个文档。 现在让我们学习如何将多个PDF文档合并为一个文档。 合并多个PDF文档 使用类的类将多个PDF文档合并到单个PDF文档中,该类提供了将两个或多个PDF文档合并到单个PDF文档中的方法。 以下是合并多个PDF文档的步骤。 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态

  • 在上一章中,我们已经了解了如何合并多个PDF文档。 在本章中,我们将了解如何从PDF文档的页面中提取图像。 从PDF文档生成图像 PDFBox库为您提供了一个名为PDFRenderer的类, PDFRenderer PDF文档呈现为AWT BufferedImage。 以下是从PDF文档生成图像的步骤。 第1步:加载现有PDF文档 使用PDDocument类的静态方法load()加载现有PDF文档

  • 在上一章中,我们已经了解了如何将给定的PDF文档拆分为多个文档。 现在让我们学习如何将多个PDF文档合并为一个文档。 合并多个PDF文档 您可以使用名为PDFMergerUtility类的类将多个PDF文档合并到一个PDF文档中,此类提供了将两个或多个PDF文档合并到单个PDF文档中的方法。 以下是合并多个PDF文档的步骤。 第1步:加载现有PDF文档 使用PDDocument类的静态方法load

  • (注意这不是按字母顺序,蓝莓排在狒狒之前) 当然,只要有一个列表不是空的,我就可以用一个计数器在“superlist”中循环,一个接一个地向resultslist中添加项目: 但最好使用一些优化的LINQ函数来实现这一点。我一直在研究Zip、GroupBy和Aggregate,但无法使它们工作。 那么:有没有一个漂亮的LINQ函数,或者多个函数的组合,可以把它变成漂亮的代码,或者我应该坚持(也许优

  • 我想将至少2个PDF文件合并为一个,同时保留原始PDF中的所有表单元素。表单元素包括文本字段、单选按钮、复选框、下拉菜单等。请查看此示例PDF文件的表单: 你能做到吗? 编辑:至于实现,我更希望在linux平台上使用开源工具(如'ghostscript'或任何其他您认为适合解决此任务的工具)的命令行解决方案。 当然,欢迎每个人提供解决这个问题的任何工作解决方案,包括一个编码解决方案,它涉及编写一个