在 C# 上合并多个 PDF 表单

问题描述 投票:0回答:2

嗨,我一直在将多个 PDF 表单合并为一个表单。 我尝试使用 PDFSharp 来完成此操作,但它无法打开只读 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 表单进行一些其他测试后,这似乎不是一个保护问题。我的 MergePDFs 不使用表单内容。

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

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

c# pdf itext
2个回答
0
投票

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

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

这篇文章了解更多信息


0
投票

SautinSoft.Pdf 库 提供以下解决方案。该库中的拆分和合并方法是完全免费,甚至用于商业用途。

using SautinSoft.Pdf;
using SautinSoft.Pdf.Facades;

var inpFiles = new List<string>() {"1.pdf", "2.pdf", "3.pdf"};
string outFile = @"Merged.pdf";

var merger = new PdfMerger();
foreach (var inpFile in inpFiles)
    merger.Append(inpFile);

merger.Save(outFile);

这是更全面的示例: https://sautinsoft.com/products/pdf/help/net/developer-guide/merge-pdf-files.php.

免责声明:我是 SautinSoft.Pdf 库的共同作者。

© www.soinside.com 2019 - 2024. All rights reserved.