PDFtk 和数字格式的 PDF 表单域
PDFtk and number formatted PDF form field
我正在使用 pdftk 使用生成的 fdf 填写表格。
在PDF表单中,表单域配置为2位小数的数字域,负值会用括号显示,例如-4444成为 (4444.00)
使用任何 PDF 查看器并更改表单上的值确实使表单正确显示具有上述行为的值(负值将变为带括号的值)
还使用 FDF 进行了测试(通过导入到表单),负值也将正确显示。
但是当使用pdftk fill-form动作时,负值保持原样,没有改变显示,仍然显示-4444而不是(4444.00)
有没有人以前遇到过这种情况/有解决方案?
更新 #1
我也测试了Apache PDFBox,它有同样的问题:(
现在我正尝试通过使用 PDF 的 javascript 来实现这一点,有什么线索表明这种方法可行吗?
更新 #2
遇到了这个线程 How to refresh Formatting on Non-Calculated field and refresh Calculated fields in Fillable PDF form,因此也尝试使用 iText。但是仍然无法正常工作
最后,我找到了一些在 PDF 表单域中设置格式的方法。
方法 #1
要求
- pdftk
- 带有 javascript
的 PDF 表格
在 PDF 中,创建一个 "Document Javascript" (see how) 并重新分配表单的值以使其变脏,如 Denis 在更新 #2 的线程中所述。脚本可以像下面这样简单:
var text1 = this.getField('text1');
text1.value = text1.value;
缺点
Javascript 只会在您打开 PDF 时触发,如果您想为 PDF 设置一些所有者密码以防止用户编辑文件,javascript 将失败,因为只读表单字段。否则,假设您在 PDF 中有 100 个表单域,重新分配它们中的每一个是一场噩梦。
方法 #2
- iText
- PDF 表格
我个人更喜欢这种方法。强大的iText已经有了API设置表单域同时格式化域显示(see how)。生成的 PDF 也可以使用正确的格式进行打印。
缺点
要么使用 iText API 找出表单字段的现有格式,要么在代码中对格式进行硬编码。比使用 pdftk 需要更多的努力。
我使用的是 ChinKang 的 #1 的更简单版本。
在工具 -> 文档 Javascripts 中:
this.calculateNow();
要检查的一件事是在“工具”->“设置字段计算顺序”中,任何计算都已正确排序。
然后我使用 https://github.com/ccnmtl/fdfgen 和 pdftk 来填写表格。
唯一的问题是您无法拼合 PDF
我正在使用 pdftk 使用生成的 fdf 填写表格。
在PDF表单中,表单域配置为2位小数的数字域,负值会用括号显示,例如-4444成为 (4444.00)
使用任何 PDF 查看器并更改表单上的值确实使表单正确显示具有上述行为的值(负值将变为带括号的值)
还使用 FDF 进行了测试(通过导入到表单),负值也将正确显示。
但是当使用pdftk fill-form动作时,负值保持原样,没有改变显示,仍然显示-4444而不是(4444.00)
有没有人以前遇到过这种情况/有解决方案?
更新 #1
我也测试了Apache PDFBox,它有同样的问题:( 现在我正尝试通过使用 PDF 的 javascript 来实现这一点,有什么线索表明这种方法可行吗?
更新 #2
遇到了这个线程 How to refresh Formatting on Non-Calculated field and refresh Calculated fields in Fillable PDF form,因此也尝试使用 iText。但是仍然无法正常工作
最后,我找到了一些在 PDF 表单域中设置格式的方法。
方法 #1
要求
- pdftk
- 带有 javascript 的 PDF 表格
在 PDF 中,创建一个 "Document Javascript" (see how) 并重新分配表单的值以使其变脏,如 Denis 在更新 #2 的线程中所述。脚本可以像下面这样简单:
var text1 = this.getField('text1');
text1.value = text1.value;
缺点
Javascript 只会在您打开 PDF 时触发,如果您想为 PDF 设置一些所有者密码以防止用户编辑文件,javascript 将失败,因为只读表单字段。否则,假设您在 PDF 中有 100 个表单域,重新分配它们中的每一个是一场噩梦。
方法 #2
- iText
- PDF 表格
我个人更喜欢这种方法。强大的iText已经有了API设置表单域同时格式化域显示(see how)。生成的 PDF 也可以使用正确的格式进行打印。
缺点
要么使用 iText API 找出表单字段的现有格式,要么在代码中对格式进行硬编码。比使用 pdftk 需要更多的努力。
我使用的是 ChinKang 的 #1 的更简单版本。
在工具 -> 文档 Javascripts 中:
this.calculateNow();
要检查的一件事是在“工具”->“设置字段计算顺序”中,任何计算都已正确排序。
然后我使用 https://github.com/ccnmtl/fdfgen 和 pdftk 来填写表格。
唯一的问题是您无法拼合 PDF