我正在构建一个自动写入PDF文件的程序。我正在使用库iText
来完成。
好吧,要检查我运行这个小代码的字段的名称:
public static void main(String[] args) throws IOException {
PdfReader reader = new PdfReader(PDF_PATH);
AcroFields fields = reader.getAcroFields();
Set<String> fldNames = fields.getFields().keySet();
for (String fldName : fldNames) {
System.out.println( fldName + ": " + fields.getField(fldName));
}
}
输出类似于:
topmostSubform [0] .CopyA [0] .Group12-13 [0] .Line13d-g [0] .Line13e [0]:13e topmostSubform [0] .CopyB [0] .Group1-11 [0] .Line3 [0] .Line3 [0]:0 topmostSubform [0] .CopyE [0] .Group1-11 [0] .Line7 [0]:7 topmostSubform [0] .CopyD [0] .Group14-24 [0] .Line16 [0] .Line15i [0]:15i
topmostSubform[0].CopyE[0].Group1-11[0].Line7[0]
是我要查找的值,:
之后的值是我在原始PDF中放置的值,用于跟踪每个字段的变量名称。
到目前为止一直很好,但我遇到了1个特定领域的问题。字段编号16
。我输入值16
以保持跟踪但在我的输出中只有1 16
输出但它应该有5个副本,CopyA
,CopyB
,{{ 1}},CopyC
和CopyD
。我发现只有这个:
CopyE
当我尝试使用此代码在此字段中写入时:
topmostSubform[0].CopyA[0].Group14-24[0].Line16[0]
它不起作用。显然form.setField("topmostSubform[0].CopyA[0].Group14-24[0].Line16[0]", "BLA BLA BLA");
字段发生了一些奇怪的事情。
PDF可以在https://www.irs.gov/pub/irs-prior/f1042s--2015.pdf
下载谢谢。
答案 0 :(得分:2)
表单是混合XFA表单(或者,我喜欢称这种表格为憎恶)。在混合XFA表单中,表单的字段被描述两次,一次使用PDF语法(纯AcroForm技术),一次使用XML(XML Forms Architecture,又名XFA)。
这是有问题的,因为:
这就是为什么我总是抛弃XML语法。请参阅FillHybridForm示例:
public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
AcroFields form = stamper.getAcroFields();
form.removeXfa();
form.setField("topmostSubform[0].CopyA[0].Group14-24[0].Line16[0]", "16");
stamper.close();
reader.close();
}
这行是你代码中可能没有的行:
form.removeXfa();
请阅读以下问题的答案以获取更多信息:
如果您只有时间阅读上面列表中的一个Q&amp; A,请选择列表中的最后一个。