我需要将预先填充的PDF / XFA表单设置为只读(因为没有输入,例如文本,复选框,单选按钮等可以更改其值) .
对于常规的AcroForms PDF和静态XFA表单,我可以通过在PdfStamper实例上调用setFormFlattening(true)来完成此操作 . 对于动态XFA表单,我必须将XDP的 field
节点的 access
属性设置为 readOnly
.
问题是,如何检测表单是否为 dynamic XFA? isXfaPresent没有用't differentiate between static or dynamic XFA forms, so isn' .
2 回答
iText在言论自由中是免费的,不像免费啤酒那样免费 . 请阅读http://lowagie.com/bumodels以获取有关我们尝试过的商业模式的更多信息,以避免从MPL / LGPL切换到AGPL .
Q1: making dynamic XFA forms read-only
那's a no-brainer with the most recent version of iText, but not supported in the obsolete version you'重新使用 . 请阅读http://lowagie.com/itext2以了解为什么你甚至不应该正式发布;我知道,因为我正在谈论iTextSharp .
Q2: flattening dynamic XFA forms
如果你想要展平动态XFA表单,你有两个选择:使用Adobe LiveCycle ES(这将花费你的手臂和腿),或使用iText的XFA Worker(这是一个便宜得多的闭源产品, Build 在顶部F / OSS iText) . 鉴于此产品的成本和工时数,我认为您不会像免费啤酒那样找到免费的解决方案 . 我一个人不知道任何这样的产品 .
Q3: how to find out if an XFA form is dynamic
这在我的书中解释,"iText in Action - Second Edition."你已经有了一半的解决方案 . 条件1:
isXfaPresent()
需要返回true
. 条件2:getFields()
需要有一个空键集 . 请参阅此示例中的方法readFieldnames()
.要添加Bruno的答案并提供C#示例代码: