PDFBox 错误无法加载字体文件
PDFBox ERROR Could not load font file
我不确定这是否是 PDFBox 的问题。但提及它可能有助于理解我的问题。
所以我收到了很多来自 PDFBox 的警告:
WARN No Unicode mapping for a37 (37) in font TCBLZV+LCIRCLE10
这是 100 分之一。
所以我决定添加警告列表中提到的 LCRICLE10 字体和其他字体。
这是我下载的字体:
- LCRICLE10: https://en.m.fontke.com/font/11103279/download/
- https://ctan.org/pkg/cm-super
- https://ctan.org/tex-archive/fonts/cm/ps-type1/bakoma/
- CMEX:https://github.com/jondot/dotfiles/tree/master/.fonts
这是我遇到的 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 字体)
我不确定这是否是 PDFBox 的问题。但提及它可能有助于理解我的问题。
所以我收到了很多来自 PDFBox 的警告:
WARN No Unicode mapping for a37 (37) in font TCBLZV+LCIRCLE10
这是 100 分之一。
所以我决定添加警告列表中提到的 LCRICLE10 字体和其他字体。
这是我下载的字体:
- LCRICLE10: https://en.m.fontke.com/font/11103279/download/
- https://ctan.org/pkg/cm-super
- https://ctan.org/tex-archive/fonts/cm/ps-type1/bakoma/
- CMEX:https://github.com/jondot/dotfiles/tree/master/.fonts
这是我遇到的 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 字体)