1

我正在尝试使用 iText 库通过 Java EE 支持 bean 填充数据的 PDF 表单。该表单是使用 InDesign 创建的,方法是在表单图像顶部分层文本字段,然后将其导出为 PDF。我的问题是字体大小似乎没有导出 PDF。如果 PDF 在 Adob​​e 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);
}
4

0 回答 0