当前位置: 首页 > 知识库问答 >
问题:

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

解阳泽
2023-03-14

我正在使用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 with Difference中不可用

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

谢谢,罗波

共有1个答案

伯俊弼
2023-03-14

Adobe通过重用{/ubuntu}字体中的嵌入字体文件来处理该问题,并以此创建新的字体资源。这里有一个快速的hack可以作为一个指导如何实现类似的东西。代码是特定于我得到的示例的。

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();
 类似资料:
  • 问题内容: 我想使用Apache PDFBox 1.8.8创建一个包含Unicode字符的PDF,但是我对支持什么和不支持什么感到困惑。 请有人澄清。另外,如果这是一个已修复的错误,则有人可以告诉我何时可能发布PDFBox的下一个版本。 谢谢。 问题答案: 基本上,您链接到的所有答案都是正确的。您必须记住它们分别引用哪个PDFBox版本。 _关于这个答案 在2.0.0之前的版本(直到当前的1.8.

  • 我有PDF模板文件与字段。客户创建的模板。它有一些文本、字段标签和字段本身。文本和标签使用嵌入在模板中的某种字体。 当我尝试用西里尔文值填充字段时会出现问题-结果文档中没有西里尔文符号。 所以问题是:1。如果我可以嵌入字体在Adobe Acrobat只用于字段,那么如何做?2.如果我可以用iTextSharp为现有字段定义字体族,那么该怎么做?

  • 问题内容: 我正在尝试使用php的函数json_encode将西里尔UTF-8数组编码为JSON字符串。示例代码如下所示: 它工作正常,但脚本的结果表示为: 每个西里尔字母组成6个字符。有没有一种方法可以获取键/值对的原始字符,而不是编码的字符? 问题答案: 您不能在此处使用JSON_UNESCAPED_UNICODE常量吗?

  • 问题内容: 当用户在数据库中插入俄语单词如“锌褉松弛屑械Russian”时,数据库将其保存为“ ??????”。如果他们以’N’字母插入,或者我以’N’字母进行选择,即;exec Table_Name N’没有问题。但是我不想在每个查询中都使用“ N”,因此对此有什么解决方案吗?顺便说一下,我将使用存储过程。 更新: 现在,我可以使用带有排序规则的俄语字母。但是我无法更改每种语言的排序规则,我只想

  • 我正在解析一个xml文件,但西里尔字符有问题: 这是存储过程的相关部分 要解析的SOAP输入: 存储过程 问题是@s看起来是这样的 我把N放在所有输入的前面,但问题显然在前面:我可以假设是在 但我不知道如何解决它。 可以提出解决方案吗? 谢谢

  • 问题内容: 我需要使用来向字段添加西里尔字母值的帮助。这是我到目前为止的内容: 当我的输入是拉丁字母时,它可以完美地工作。但是我也需要处理西里尔字母的输入。我该怎么做? ps这是我得到的异常:原因:java.lang.IllegalArgumentException:U + 043D(’afii10079’)在该字体Helvetica编码中不可用:WinAnsiEncoding 问题答案: 下面的