如何解决“...这个字体的编码不可用”?

时间:2016-10-14 14:37:03

标签: java pdf pdfbox

所以我使用PDFBox填写一些pdf。到目前为止一切都很棒 - 我使用Avenir Light字体创建了一个pdf格式,我可以填写它。但是,刚才出现的问题是,当我尝试用{{{{{{{ 1}},łą ...我收到以下错误:

ć

有不同的数字。

现在,我的问题是 - 如何解决这个问题,以便我可以自动填写表单?当我在Acrobat Reader中打开pdf时,我可以插入这些字母,但我没有收到任何错误。以下是我设置字段的方法:

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

更新

我一直试图像这样上传我自己的Avenir-Light.tff:

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() );
    }
}

然而,这似乎对打印字段没有任何影响,并抛出几乎相同的消息:

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);

1 个答案:

答案 0 :(得分:3)

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

  

PDType1Font.TIMES_ROMAN
PDType1Font.TIMES_BOLD
  PDType1Font.TIMES_ITALI
PDType1Font.TIMES_BOLD_ITALIC
  PDType1Font.HELVETICA
PDType1Font.HELVETICA_BOLD
  PDType1Font.HELVETICA_OBLIQUE
  PDType1Font.HELVETICA_BOLD_OBLIQUE
PDType1Font.COURIER
  PDType1Font.COURIER_BOLD
PDType1Font.COURIER_OBLIQUE
  PDType1Font.COURIER_BOLD_OBLIQUE
PDType1Font.SYMBOL
  PDType1Font.ZAPF_DINGBATS

因此,如果您想使用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);

<强>更新

  

如果形式为:OpenType Layout,您知道为什么它也会显示警告   字体Avenir-Light中使用的表格未在PDFBox和   会被忽略吗?

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