首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用iText7防止Pdf文件中交互字段的扁平

如何利用iText7防止Pdf文件中交互字段的扁平
EN

Stack Overflow用户
提问于 2021-03-29 08:36:41
回答 1查看 372关注 0票数 1

我有PDF文件与交互式字段。我可以手动更改这些字段,不会出现任何问题。

我需要使用库iText7更改Pdf文件中的交互式字段。我可以使用iText7更改交互式字段,但是当我在操作后打开文件时,我将能够看到交互式字段是扁平的,因此我不能在手动模式下更改字段值。

我创建了简洁的例子,因为我只打开和关闭pdf文件。我有同样的结果:程序工作后,PDF文件中的所有字段都被夷为平地。

这个例子。

代码语言:javascript
复制
string pdfReadPath = @"D:\IT\PROJECTS\PMIC\TASKS\PDF\TEMP\Read_Pdf.pdf";
string pdfWritePath = @"D:\IT\PROJECTS\PMIC\TASKS\PDF\TEMP\Write_Pdf.pdf";

//Initialize pdf document
PdfReader pdfReader = new PdfReader(pdfReadPath);
PdfWriter pdfWriter = new PdfWriter(pdfWritePath);

PdfDocument pdfDoc = new PdfDocument(pdfReader, pdfWriter);

pdfDoc.Close();

我不想让交互字段变平。

如果我想让交互字段在程序工作后不会变平,有谁知道我可以用什么方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-29 15:16:12

输出中的字段不是平坦的。除了之外,您可以在任何支持交互表单的PDF查看器中打开PDF,例如Foxit。

相反,问题在于您的PDF包含一个混合XFA/AcroForm表单定义和一个使用权限签名,而您在代码中忽略了这一点。因此,您的代码无效的签名使Adobe以只读模式显示表单。

通过在附加模式下操作PDF,您可以修复这个问题。

问题的细节

您的PDF包含一个混合XFA/AcroForm表单定义和一个使用权限签名。

前者意味着您的PDF中的交互式表单定义了两次,一次是以本机PDF方式(AcroForm)定义的,一次是在PDF (XFA)中作为一种特殊的XML载体定义的。自2017年以来,XFA表格已被废弃/淘汰。

只有少数PDF处理器支持XFA表单。Acrobat和。但是只支持这一点,如果包含表单的PDF是由Adobe产品生成的,并且此后只执行表单填充。

要检查Adobe产品是否生成了带有XFA表单的PDF,Adobe Acrobat Reader将在其中查找使用权限签名,这是一种特殊类型的签名,用于标记Adobe PDF生成器生成的PDF,以向Adobe Reader发出信号,指示它将扩展其功能。

但它不仅要查找该签名,而且还要验证它。但是,当您的代码完全重新编写PDF时,输出PDF中的签名就被破坏了。Acrobat在这种情况下不再允许编辑表单,而只是显示它的只读表示,您将其错误地解释为扁平的表单。

附加式书写

为了不使iText 7的签名无效,您必须保留原来的PDF字节,并且只能将它们作为增量更新来应用更改。

通过使用选择了PdfDocumentStampingProperties实例化AppendMode来做到这一点,所以

代码语言:javascript
复制
PdfDocument pdfDoc = new PdfDocument(pdfReader, pdfWriter);

使用

代码语言:javascript
复制
PdfDocument pdfDoc = new PdfDocument(pdfReader, pdfWriter, new StampingProperties().UseAppendMode());

但是要小心:验证不仅检查使用权限签名是否有效,还检查以后的增量更新是否只包含允许的更改。因此,请确保只更改代码中的表单内容。

另一种解决办法

由于您有一个具有混合表单定义的PDF,而不是一个纯XFA表单定义,因此您可以同时删除XFA表单定义和使用权限签名。此后,您可以自由地操作PDF。这是在this answer中提出的一个类似的问题,它的不同之处在于,PDF是另外加密的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66851032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档