【发布时间】:2020-12-27 04:25:58
【问题描述】:
嘿,我坚持将多个 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 表单进行了一些其他测试后,它似乎不是保护问题。我的 MergePDF 不使用表单内容。
所以任务还是“在 C# 上合并几个 PDF 表单”
EDIT2:这是我要合并的 2 个文件。一个是修改保护的,一个不是。两个都满了。 https://drop.infini.fr/r/XFt_Sd8gFc#7thQxyjeGdo8uIkXN6oys82KLB8VE0AHmflb0uYRkVM= https://drop.infini.fr/r/NUa2n2No0R#FaOAGyzk0SrTDtB6CiXUhF7WEKw0EHGHHM7gaKz20o4=
【问题讨论】:
-
也许您无法阅读它的原因是因为它受到保护,因此您不应该被允许做您正在做的事情?你基本上是在试图伪造一个受保护的文件,所以在某些方面我很高兴它不起作用。
-
您确定该 pdf 文件只是“只读”且不受 drm 保护吗?
-
PDF 受到保护,不能修改,不能填写表格。我可以手动填写表格并使用 itextsharp 并保存它而不会出现问题。当我尝试将这个与另一个合并时,受保护的内容正在合并,但不是表单内容。
-
在非受保护表单上进行了一些其他测试后,内容未与合并一起出现。所以这不是保护问题。
-
您的 PDF 不是 XFA 表格。但我只是仔细查看了您提供的代码,发现您使用了基于
PdfWriter/GetImportedPage/Image.GetInstance的方法。 iText 开发人员通常不建议使用这种方法,因为它明确忽略了页面的静态内容以外的所有内容,特别是它会丢弃注释并且您的表单字段小部件是注释。您应该改用基于PdfCopy的解决方案,请参阅this answer(其中的链接可能已变为非活动状态,但代码仍然显示该想法)。