PDFBox 错误无法加载字体文件

PDFBox ERROR Could not load font file

我不确定这是否是 PDFBox 的问题。但提及它可能有助于理解我的问题。

所以我收到了很多来自 PDFBox 的警告:

WARN  No Unicode mapping for a37 (37) in font TCBLZV+LCIRCLE10

这是 100 分之一。

所以我决定添加警告列表中提到的 LCRICLE10 字体和其他字体。

这是我下载的字体:

这是我遇到的 PDFBox 错误:

5517 ERROR Could not load font file: /home/$USER/.fonts/bakoma/pfb/eurb9.pfb
5518 java.io.IOException: Found Token[kind=NAME, text=dup] but expected INTEGER
5519    at org.apache.fontbox.type1.Type1Parser.read(Type1Parser.java:812)
5520    at org.apache.fontbox.type1.Type1Parser.readEncoding(Type1Parser.java:226)
5521    at org.apache.fontbox.type1.Type1Parser.parseASCII(Type1Parser.java:135)
5522    at org.apache.fontbox.type1.Type1Parser.parse(Type1Parser.java:61)
5523    at org.apache.fontbox.type1.Type1Font.createWithPFB(Type1Font.java:56)
5524    at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.addType1Font(FileSystemFontProvider.java:646)
5525    at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.scanFonts(FileSystemFontProvider.java:255)
5526    at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.<init>(FileSystemFontProvider.java:225)
5527    at org.apache.pdfbox.pdmodel.font.FontMapperImpl$DefaultFontProvider.<clinit>(FontMapperImpl.java:130)
5528    at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getProvider(FontMapperImpl.java:149)
5529    at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFont(FontMapperImpl.java:413)
5530    at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFontBoxFont(FontMapperImpl.java:376)
5531    at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getFontBoxFont(FontMapperImpl.java:350)
5532    at org.apache.pdfbox.pdmodel.font.PDType1Font.<init>(PDType1Font.java:146)
5533    at org.apache.pdfbox.pdmodel.font.PDType1Font.<clinit>(PDType1Font.java:79)
5534    at org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:62)
5535    at org.apache.pdfbox.pdmodel.PDResources.getFont(PDResources.java:143)
5536    at org.apache.pdfbox.contentstream.operator.text.SetFontAndSize.process(SetFontAndSize.java:60)
5537    at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:838)
5538    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:495)
5539    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:469)
5540    at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:150)
5541    at org.apache.pdfbox.text.LegacyPDFStreamEngine.processPage(LegacyPDFStreamEngine.java:139)
5542    at org.apache.pdfbox.text.PDFTextStripper.processPage(PDFTextStripper.java:391)
5543    at org.apache.tika.parser.pdf.PDF2XHTML.processPage(PDF2XHTML.java:147)
5544    at org.apache.pdfbox.text.PDFTextStripper.processPages(PDFTextStripper.java:319)
5545    at org.apache.pdfbox.text.PDFTextStripper.writeText(PDFTextStripper.java:266)
5546    at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:117)
5547    at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:168)
5548    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
5549    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
5550    at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:143)
5551    at org.apache.tika.cli.TikaCLI$OutputType.process(TikaCLI.java:205)
5552    at org.apache.tika.cli.TikaCLI.process(TikaCLI.java:486)
5553    at org.apache.tika.cli.TikaCLI.main(TikaCLI.java:145)

这是许多其他人中的一个。

这是一个小清单:

ERROR Could not load font file: /home/$USER/.fonts/bakoma/pfb/eufm6.pfb
ERROR Could not load font file: /home/$USER/.fonts/bakoma/pfb/euex9.pfb
ERROR Could not load font file: /home/$USER/.fonts/bakoma/pfb/eusm10.pfb
ERROR Could not load font file: /home/$USER/.fonts/bakoma/pfb/cmmi7.pfb
ERROR Could not load font file: /home/$USER/.fonts/bakoma/pfb/msam6.pfb

他们似乎都来自:.fonts/bakoma/pfb/

当我使用 FireFox 时,我看到了这个:

我从 ~/.fonts/ 中删除了字体并清除了字体缓存,现在一切都恢复正常了。

"WARN No Unicode mapping" 消息仅在您进行文本提取时才相关,即您的文本对于该字形来说毫无意义,因为缺少 unicode 映射。 "TCBLZV+LCIRCLE10" 表示 embedded 字体子集,因此添加字体无论如何都无济于事。另见: https://pdfbox.apache.org/2.0/faq.html#notext

所以你真正的问题到此为止,它不会通过加载字体变得更好,除非你在使用 non-embedded 字体时遇到问题。

错误 "Found Token[kind=NAME, text=dup] but expected INTEGER" 表示解析 type 1 字体时出错。这可能是字体中的语法错误,或 PDFBox 类型 1 字体解析器中的错误。我宁愿怀疑后者,因为 type 1 字体是基于 PostScript 的,而 PDFBox 解析器只能识别它的一个子集。

更新:我查看了 eurb9.pfb 字体。就像我怀疑的那样,字体的ASCII部分有一个计算("dup dup 161 10 getinterval 0 exch putinterval dup dup 173 23 getinterval 10 exch putinterval dup dup 127 exch 196 get put readonly def"),我们无法解析它。我们自己的 1 类解析器只能解析不计算的元素。 (这仍然涵盖了 99% 的 type1 字体)