如何嵌入没有字体描述符的字体?

时间:2016-10-03 07:45:58

标签: java pdf fonts itext

我正在尝试将PDF转换为PDFA-2B。 1 of my test files包含没有字体描述符的Type1字体:

enter image description here

我需要嵌入这些字体。

如何嵌入这些字体?

我尝试创建字体描述符,但我没有成功。

private static PdfDictionary addFontDesc(PdfDictionary font){
        PdfDictionary fontDescriptor;
        fontDescriptor = new PdfDictionary(PdfName.FONTDESCRIPTOR);
        PRIndirectReference fd = fontDescriptor.getIndRef();

        if (fd != null){
            font.put(PdfName.FONTDESCRIPTOR, fd);
            System.out.println("fontDescriptor was added to font " + font.getAsName(PdfName.BASEFONT).toString());
        }else {
            System.out.println("Error while trying to add fontDescriptor to " + font.getAsName(PdfName.BASEFONT).toString());
        }
        return font;
}

我总是得到NullPointerException

1 个答案:

答案 0 :(得分:0)

正如@Bruno在评论中已经说过的那样,你当前状态下的问题过于宽泛。因此,这个答案仅关注你提出的有形问题部分:

  

总是得到一个NullPointerException。

您似乎认为

中的getIndRef
PRIndirectReference fd = fontDescriptor.getIndRef();

使fontDescriptor成为间接对象(因为只有间接对象可以有间接引用),如果它不是一个。

这个假设是错误的。如果您对一个非间接的对象致电getIndRef,则会在您观察时获得null

您可以使用PdfObject方法PdfWriter进行任意addToBody间接,该方法返回PdfIndirectObject,您可以使用getIndirectReference来查询其间接引用,< / p>

public PdfIndirectObject addToBody(final PdfObject object) throws IOException

public PdfIndirectObject addToBody(final PdfObject object, final boolean inObjStm) throws IOException