我正在尝试将PDF转换为PDFA-2B。 1 of my test files包含没有字体描述符的Type1字体:
我需要嵌入这些字体。
如何嵌入这些字体?
我尝试创建字体描述符,但我没有成功。
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
。
答案 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