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

pdfbox:U+0054在aaaaad+freeserifbold字体中没有字形

龚寂弦
2023-03-14

我的PDFBox抛出以下错误:在aaaaad+freeserifbold字体中没有U+0054的字形。我在stackoverflow上找到了几个类似的线程,但我无法用它们来解决我的问题。

    public QuoteWorkerPdf() throws IOException {
    // Create PDF with one blank page
    document = PDDocument.load(
            getClass().getResourceAsStream("data/quote_template.pdf"));
    page = (PDPage) document.getDocumentCatalog().getPages().get(0);
    printable = new PDFPrintable(document);

    // get the document catalog
    PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm();

    // as there might not be an AcroForm entry a null check is necessary
    if (acroForm != null)
    {
        // Retrieve an individual field and set its value.
        PDTextField field = (PDTextField) acroForm.getField( "q2_quotationPrepared" );
        field.setValue("TextEntry");

        // If a field is nested within the form tree a fully qualified name
        // might be provided to access the field.
        //field = (PDTextField) acroForm.getField( "fieldsContainer.nestedSampleField" );
        //field.setValue("Text Entry");
    }

    // Save and close the filled out form.
    document.save("target/FillFormField.pdf");
}

StackTrace:

Exception in thread "main" java.lang.IllegalArgumentException: No glyph for U+0054 in font AAAAAD+FreeSerifBold
at org.apache.pdfbox.pdmodel.font.PDCIDFontType2.encode(PDCIDFontType2.java:363)
at org.apache.pdfbox.pdmodel.font.PDType0Font.encode(PDType0Font.java:398)
at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:324)
at org.apache.pdfbox.pdmodel.font.PDFont.getStringWidth(PDFont.java:353)
at org.apache.pdfbox.pdmodel.interactive.form.PlainText$Paragraph.getLines(PlainText.java:174)
at org.apache.pdfbox.pdmodel.interactive.form.PlainTextFormatter.format(PlainTextFormatter.java:182)
at org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.insertGeneratedAppearance(AppearanceGeneratorHelper.java:508)
at org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceContent(AppearanceGeneratorHelper.java:364)
at org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceValue(AppearanceGeneratorHelper.java:237)
at org.apache.pdfbox.pdmodel.interactive.form.PDTextField.constructAppearances(PDTextField.java:263)
at org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField.applyChange(PDTerminalField.java:228)
at org.apache.pdfbox.pdmodel.interactive.form.PDTextField.setValue(PDTextField.java:218)
at aaalabel.diefinder.QuoteWorkerPdf.<init>(QuoteWorkerPdf.java:69)
at aaalabel.diefinder.QuoteWorkerPdf.main(QuoteWorkerPdf.java:114)

共有1个答案

郑翰海
2023-03-14

这段代码是为您的文件量身定制的。它将默认外观字符串更改为使用不同的字体。也请参见这个答案,它有点相关,但更笼统。

输入文件的问题是,字段中使用的字体是子集的,因此它没有您所期望的所有字形。

PDDocument doc = PDDocument.load(new File("82667884384374 (1).pdf"));
PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
PDTextField field = (PDTextField) acroForm.getField("q2_quotationPrepared");
COSName helvName = acroForm.getDefaultResources().add(PDType1Font.HELVETICA); // use different font if you want. Do not subset!
field.setDefaultAppearance("/" + helvName.getName() + " 10 Tf 0 g"); // modifies your existing DA string
field.setValue("TextEntry");        
doc.save(new File("82667884384374 (1)-new.pdf"));
doc.close();
 类似资料:
  • 我将Java 11 Corretto Spring Boot与Apache POI一起使用,但在AWS Lambda上使用时遇到了问题。如果我以“普通”API运行,效果很好,但在AWS lambda中运行servless时失败。 原因:java。lang.错误:可能的致命错误:找不到物理字体。在java。桌面/阳光。字体。SunFontManager。java上的lambda$getDefault

  • 当试图使用Java和库打印PDF页面时,我得到了以下错误: PDFBOX:U+000A(“控件LF”)在此字体中不可用Helvetica编码:WinAnsiEncoding

  • 我试图在文档中创建新的页面并写入一些文本,同时使用文件中包含的字体。 字体是从资源中提取的: 后来用来写一些文字: 包括PDF在内的完整项目可在github存储库中获得,该存储库显示了该问题

  • 在我的代码顶部,我有: 在我的CSS中,我有: font-family:“Merriweather”,; 但它并没有出现。我不知道原因是什么。它看起来很简单,但什么都不起作用。 如有任何帮助,我们将不胜感激。 下面是我的HTML的顶部: 这是我的CSS,保存为stylesheet.CSS: 谢谢

  • 正如标题所说。正确呈现所有的unicode格式,包括复合字符和影响其他字符和连字的字符,这真的很难,我理解这一点。我们的字体似乎是为最大限度地支持Unicode符号而设计的(Symbola、Code2001等),以及特定平面或字符范围的专用字体(BabelStone Han等)。 我不太了解字体的底层技术细节。有最大尺寸吗?是版权问题吗?重画所有现存的大约110,000个符号是不是太难了?我理解对

  • 有没有可能在fo:块中禁用文本片段的断字功能?我的问题是不可能在fo:inline上设置hyphenate="false ",因为它不是一个属性。fo:block内部的fo:block创建一个新行... fo-示例: 更新: 我尝试了 soulution 由 @DanielNorberg 发布,因为所有解决方案都无法正常工作。这似乎是一种解决方法,但仍然没有提供我想要的输出。 我使用此模板: fo