我正在尝试使用 iText 库通过 Java EE 支持 bean 填充数据的 PDF 表单。该表单是使用 InDesign 创建的,方法是在表单图像顶部分层文本字段,然后将其导出为 PDF。我的问题是字体大小似乎没有导出 PDF。如果 PDF 在 Adobe Reader 中显示,字体大小似乎确实适用(无论是“自动”还是特定的 # 第 8 行)。但是当使用 iText 库进行操作时,它会被忽略。我发现我可以在设置值时强制设置大小,但现在在方法上得到一个“FATAL:#{njBean.testForm()}:com.itextpdf.kernel.PdfException:dict.not.contain.font.data”调用“.setFontSize(8)”我找不到任何说明如何从 InDesign 端强制将默认字体用于文本字段的内容。我错过了什么??
我正在使用 iText 7.0.0;InDesign CC 11.4.0.90 .... 以下是代码段:
public void testForm() throws IOException, Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
manipulatePdf(SRC, DEST);
}
...
public void manipulatePdf(String src, String dest) throws IOException, Exception {
String dow = EMPTY_STRING; //test var
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm");
boolean foundDriver1 = false;
boolean foundDriver2 = false;
// Use to access bundled resources
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
try (
//Initialize PDF document
InputStream input = ec.getResourceAsStream(SRC);
PdfDocument pdf = new PdfDocument(new PdfReader(input), new PdfWriter(dest))
) {
revData = loadData(..from database..);
driverData = loadDrivers(..from database..);
setupRecord = loadSetup(..from database..
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
Map<String, PdfFormField> fields = form.getFormFields();
……
fillField(fields, "agencyDescP1", setupRecord.getDepartment());
……
private void fillField(Map<String, PdfFormField> fields, String fieldName, String value) throws Exception {
PdfFormField field = fields.get(fieldName);
if (value == null)
value = "-";
if (field != null)
field.setValue(value).setFontSize(8);
else
throw new Exception("Unable to find field on PDF: " + fieldName);
}