所以我使用 PDFBox 来填写一些 pdf。到目前为止一切都很好 - 我用 Avenir Light 字体在 pdf 中创建了一个表单,我可以填写它。但是,刚刚出现的问题是,当我尝试使用 ł 等字母填写 pdf 时, ą , ć ... 我收到以下错误:

U+0142 is not available in this font's encoding: MacRomanEncoding with differences

用不同的数字。

现在,我的问题是 - 我该如何解决这个问题,以便我可以自动填写表格?当我在 Acrobat Reader 中打开 pdf 时,我可以插入这些字母,并且没有出现任何错误。这是我设置字段的方法:
public void setField(PDDocument document, PDField field, String value ) throws IOException {
    if( field != null && value != null) {
        try{
            field.setValue(value);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    else {
        System.err.println( "No field found with name:" + field.getPartialName() );
    }
}

更新

我一直在尝试像这样上传我自己的 Avenir-Light.tff:
PDFont font = PDType1Font.HELVETICA;
PDResources res = new PDResources();
COSName fontName = res.add(font);
acroForm.setDefaultResources(res);
String da = "/" + fontName.getName() + " 12 Tf 0 g";
acroForm.setDefaultAppearance(da);

但是,这似乎对打印的字段没有任何影响,并且抛出几乎相同的消息:
U+0104 ('Aogonek') is not available in this font Helvetica (generic: ArialMT) encoding: WinAnsiEncoding

最佳答案

PDFBox 在 PDType1Font 中定义了 14 种标准字体:



因此,如果您想使用 Avenir-Light,您必须从 .ttf 文件中加载它。您可以按照@TilmanHausherr 建议的 PDType0Font.load(doc, new File("path/Avenir-Light.ttf"), false). 执行此操作

PDFont font = PDType0Font.load(doc, new File("path/Avenir-Light.ttf"), false);
PDResources res = new PDResources();
COSName fontName = res.add(font);
acroForm.setDefaultResources(res);
String da = "/" + fontName.getName() + " 12 Tf 0 g";
acroForm.setDefaultAppearance(da);

更新



Avenir-light 字体使用 PDFBox 尚不支持的 OpenType 布局表(高级版式)。这个高级版式将被忽略

关于java - 如何解决 "...is not available in this font' 的编码”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40045818/

10-10 10:42