使用 PDFBox 将西里尔字符写入 PDF 表单字段
Write cyrillic chars into PDF form fields with PDFBox
我正在使用 pdfbox 2.0.5 使用以下代码填写 PDF 文档的表单域:
doc = PDDocument.load(inputStream);
PDDocumentCatalog catalog = doc.getDocumentCatalog();
PDAcroForm form = catalog.getAcroForm();
for (PDField field : form.getFieldTree()){
field.setValue("должен");
}
我收到此错误:U+0434 ('afii10069') 在此字体中不可用 Times-Roman(通用:TimesNewRomanPSMT)编码:StandardEncoding 有差异
PDF 文档本身包含显示良好的西里尔文本。我试过使用不同的字体。对于 "Arial Unicode MS",它想要下载 50MB "Adobe Acrobat Reader DC Font Pack"。这是对西里尔字符的要求吗?
我必须在文本字段中指定哪种字体来处理西里尔(或亚洲)字符?
谢谢,
罗波
解决方案很简单:
form.setNeedAppearances(真);
然后我删除字段的蓝色框:
field.setReadOnly(真);
Adobe 通过重用 {/Ubuntu} 字体中的嵌入字体文件来处理这个问题,并从中创建一个新的字体资源。这是一个快速技巧,可以作为如何实现类似目标的指南。该代码特定于我得到的示例。
PDDocument doc = PDDocument.load(new File(...));
PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
PDResources formResources = acroForm.getDefaultResources();
PDTrueTypeFont font = (PDTrueTypeFont) formResources.getFont(COSName.getPDFName("Ubuntu"));
// here is the 'magic' to reuse the font as a new font resource
TrueTypeFont ttFont = font.getTrueTypeFont();
PDFont font2 = PDType0Font.load(doc, ttFont, true);
ttFont.close();
formResources.put(COSName.getPDFName("F0"), font2);
PDTextField formField = (PDTextField) acroForm.getField("Text2");
formField.setDefaultAppearance("/F0 0 Tf 0 g");
formField.setValue("öäüинформацию");
doc.save(...);
doc.close();
我正在使用 pdfbox 2.0.5 使用以下代码填写 PDF 文档的表单域:
doc = PDDocument.load(inputStream);
PDDocumentCatalog catalog = doc.getDocumentCatalog();
PDAcroForm form = catalog.getAcroForm();
for (PDField field : form.getFieldTree()){
field.setValue("должен");
}
我收到此错误:U+0434 ('afii10069') 在此字体中不可用 Times-Roman(通用:TimesNewRomanPSMT)编码:StandardEncoding 有差异
PDF 文档本身包含显示良好的西里尔文本。我试过使用不同的字体。对于 "Arial Unicode MS",它想要下载 50MB "Adobe Acrobat Reader DC Font Pack"。这是对西里尔字符的要求吗?
我必须在文本字段中指定哪种字体来处理西里尔(或亚洲)字符?
谢谢, 罗波
解决方案很简单: form.setNeedAppearances(真);
然后我删除字段的蓝色框: field.setReadOnly(真);
Adobe 通过重用 {/Ubuntu} 字体中的嵌入字体文件来处理这个问题,并从中创建一个新的字体资源。这是一个快速技巧,可以作为如何实现类似目标的指南。该代码特定于我得到的示例。
PDDocument doc = PDDocument.load(new File(...));
PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
PDResources formResources = acroForm.getDefaultResources();
PDTrueTypeFont font = (PDTrueTypeFont) formResources.getFont(COSName.getPDFName("Ubuntu"));
// here is the 'magic' to reuse the font as a new font resource
TrueTypeFont ttFont = font.getTrueTypeFont();
PDFont font2 = PDType0Font.load(doc, ttFont, true);
ttFont.close();
formResources.put(COSName.getPDFName("F0"), font2);
PDTextField formField = (PDTextField) acroForm.getField("Text2");
formField.setDefaultAppearance("/F0 0 Tf 0 g");
formField.setValue("öäüинформацию");
doc.save(...);
doc.close();