我正在尝试根据一些数据计算(使用Java)自动修改pdf模板
我没有修改pdf的经验,我正试图用itext7
它来做这件事。
我一直在阅读如何将文本添加到 pdf 中,甚至在这里我也看到了如何使用“密钥”来填写 Acrosfield
不过,我没有制作我正在使用的 pdf 模板(可修改),所以我不知道您可以手动填写的字段是用 Acrosfields 还是其他技术制作的,我不知道键是什么或每个字段如果他们有一个...
我看到了这个问题;它在哪里说明如何获取所有字段及其值,但是当我尝试出现在我得到的唯一答案中的代码时;
main.java:[40,0] error: illegal start of type
main.java:[40,19] error: ')' expected
main.java:[40,30] error: <identifier> expected
3 errors
在这部分:
for (String fldName : fldNames) {
System.out.println( fldName + ": " + fields.getField( fldName ) );
}
经过一番尝试,我一直在寻找更多信息,但如果可能的话,我找不到获得这些“钥匙”的方法......
- - - - 编辑 - - - -
我制作了这段代码是为了制作我的 pdf 模板的副本,该模板在每个字段中都有 Acrosfield 键的名称:
package novgenrs;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Set;
public class MakePDF {
public static void MakePDF(String[] args) throws IOException, DocumentException{
PdfReader reader = new PdfReader("template.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("result.pdf"));
//AcroFields form = stamper.getAcroFields();
AcroFields fields = reader.getAcroFields();
AcroFields wrt = stamper.getAcroFields();
Set<String> fldNames = fields.getFields().keySet();
for (String fldName : fldNames) {
wrt.setField(fldName, fldName) ;
}
stamper.close();
reader.close();
}
}
注意:这仅适用于 itext5。出于某种原因,当我尝试使用 itext7 执行此操作时,我无法使其正常工作,因此我尝试使用 itext5 执行此操作,并且成功了!