首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用iText检测动态XFA

用iText检测动态XFA
EN

Stack Overflow用户
提问于 2012-10-30 17:29:33
回答 2查看 4.5K关注 0票数 3

我需要使预先填充的PDF/XFA表单只读(因为在没有输入的情况下,例如文本、复选框、单选按钮等可以更改它们的值)。

对于常规的AcroForms PDF和静态XFA表单,我可以通过在PdfStamper实例上调用setFormFlattening(true)来实现这一点。对于动态XFA表单,我必须将XDP的field节点的field属性设置为readOnly

问题是,如何检测表单是 dynamic XFA?isXfaPresent没有区分静态还是动态XFA表单,所以没有用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-30 17:52:33

iText和言论自由一样自由,而不是像啤酒一样自由。有关我们尝试过的业务模型的更多信息,请阅读http://lowagie.com/bumodels,以避免从MPL/LGPL切换到AGPL。

Q1:生成动态XFA表单只读

对于最新版本的iText来说,这是一个无需考虑的问题,但在您使用的过时版本中却不受支持。请阅读http://lowagie.com/itext2,找出为什么不应该使用iText 4.2.0 (据我所知,这甚至不是一个官方版本;我知道,因为我负责每个iText版本)。也许你是在说iTextSharp。

Q2:扁平化动态XFA表单

如果您想要扁平化一个动态的XFA表单,您有两个选择:要么使用Adobe (这将花费您一条手臂和一条腿),要么使用iText的LiveCycle工作器(这是一个构建在F/OSS iText之上的更便宜的封闭源产品)。考虑到这个产品的成本和工时,我认为你找不到像免费啤酒那样免费的解决方案。我一个人不知道任何这样的产品。

Q3:如何确定XFA表单是否为动态

这在我的书“行动中的iText-第二版”中作了解释。你已经有了一半的解决方案。条件1:isXfaPresent()需要返回true。条件2:getFields()需要一个空密钥集。请参阅本例中的方法readFieldnames()

票数 2
EN

Stack Overflow用户

发布于 2015-02-06 22:32:51

为了添加Bruno的答案并提供C#示例代码:

代码语言:javascript
运行
复制
PdfReader reader = new PdfReader(filePath);
XfaForm xfa = new XfaForm(reader);

//Check if PDF file contains Dynamic XFA data
if (xfa != null && xfa.XfaPresent && xfa.Reader.AcroFields.Fields.Keys.Count == 0)
{
   MessageBox.Show("This PDF contains Dynamic XFA data.");
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13144500

复制
相关文章

相似问题

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