gpt4 book ai didi

java - 使用 PDFBox 将西里尔字符写入 PDF 表单字段

转载 作者:行者123 更新时间:2023-12-02 03:12:02 24 4
gpt4 key购买 nike

我正在使用 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 字体包”。这是西里尔字符的要求吗?

我必须在文本字段中指定哪种字体才能处理西里尔文(或亚洲)字符?

谢谢,罗波

最佳答案

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

关于java - 使用 PDFBox 将西里尔字符写入 PDF 表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42903217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com