我已经写了一个简单的代码来编辑一个pdf格式的表单内容。一切都很好(新的pdf是用修改过的表单创建的),但却抛出了一个关于字体的奇怪的问题。这是我的代码:
try {
PDDocument pdfDoc = PDDocument.load("/home/giozh/universita/schedepazienti.pdf");
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField("dx1");
if (field != null) {
field.setValue("asd");
} else {
System.err.println("No field found with name:" + "applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]");
}
pdfDoc.save("/home/giozh/universita/schedepazienti1.pdf");
pdfDoc.close();
} catch (IOException ex) {
Logger.getLogger(Prove.class.getName()).log(Level.SEVERE, null, ex);
} catch (COSVisitorException ex) {
Logger.getLogger(Prove.class.getName()).log(Level.SEVERE, null, ex);
}这是一个例外:
Grave: error while creating a font
java.io.IOException: Cannot create font as /SubType is not set.
at org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:88)
at org.apache.pdfbox.pdmodel.PDResources.getFonts(PDResources.java:203)
at org.apache.pdfbox.pdmodel.interactive.form.PDAppearance.getFontAndUpdateResources(PDAppearance.java:439)
at org.apache.pdfbox.pdmodel.interactive.form.PDAppearance.setAppearanceValue(PDAppearance.java:268)
at org.apache.pdfbox.pdmodel.interactive.form.PDVariableText.setValue(PDVariableText.java:131)
at prove.Prove.main(Prove.java:37)(第37行是我调用setValue()方法的地方)如何修复它?
发布于 2013-11-13 05:47:14
本质上
您的PDF有一个错误,它被正常地忽略(只是一些日志记录输出)。
详细信息
PDF中的AcroForm字典如下所示:
4 0 obj
<<
/Fields [ 12 0 R ]
/DA(/Helvetica 0 Tf 0 g )
/DR
<<
/Font
<<
/Helvetica 11 0 R
/Encoding<</PDFDocEncoding 10 0 R>>
>>
>>
/NeedAppearances true
>>
endobj其中的Helvetica字体字典包含字体的一个条目(该字体是相关字段中使用的字体,请参阅其DA值/Helvetica 0 Tf 0.000000 0.000000 0.000000 rg),以及其值根本不代表字体的编码的条目。
PDFBox试图解析名为Encoding的“字体”,但失败了。但PDResources.getFonts()只记录产生的异常,并继续忽略此问题:
try
{
newFont = PDFontFactory.createFont( (COSDictionary)font );
}
catch (IOException exception)
{
LOG.error("error while creating a font", exception);
}(pdfbx-1.8.2.jar,org.apache.pdfbox.pdmodel.PDResources)
因此,您会看到以"error while creating a font“为首的异常(因为它显式地记录在日志中),但结果是正确创建的(因为异常基本上被忽略了)。
发布于 2016-12-05 20:25:33
我只是想补充一下,我在Helvetica字体上遇到了类似的问题,这是一种标准字体,它被证明是表单文本区域的大小。表单会填满,但当它平整时,字段就会消失。我认为这是一个问题的组合(包装,溢出等),但日志中唯一的错误是关于字体的。该表单是使用adobe创建的,并填充了PDFbox
https://stackoverflow.com/questions/19933931
复制相似问题