【发布时间】:2016-10-03 12:13:18
【问题描述】:
我正在使用 PDFBox 从几个 PDF 文档中提取文本,并且在运行我的单元测试套件(通过 gradle)时,我遇到了由 NullPointerException 引起的间歇性故障——我现在的基本假设是它是由多个线程试图同时将字体加载到字体字典缓存中。
我知道,as is stated in the FAQs,PDFBox 不是线程安全的 - 但我从中和this discussion here 得到的印象是,这与同时访问文档的多个线程特别相关,并且评论似乎暗示字体框缓存应该是线程安全的。
我在单元测试中遇到的例外是:
WARNING: Using fallback font 'LiberationSans-Bold' for 'Arial-BoldItalicMT'
java.lang.NullPointerException:
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getFont(FontMapperImpl.java:463)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFont(FontMapperImpl.java:417)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getTrueTypeFont(FontMapperImpl.java:321)
at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.<init>(PDTrueTypeFont.java:198)
at org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:75)
at org.apache.pdfbox.pdmodel.PDResources.getFont(PDResources.java:123)
at org.apache.pdfbox.contentstream.operator.text.SetFontAndSize.process(SetFontAndSize.java:60)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:815)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:472)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:446)
...
Oct 03, 2016 12:21:24 PM org.apache.pdfbox.pdmodel.font.PDTrueTypeFont <init>
WARNING: Using fallback font 'LiberationSans-Bold' for 'Arial-BoldMT'
Oct 03, 2016 12:21:24 PM org.apache.pdfbox.pdmodel.font.PDTrueTypeFont <init>
我使用的是 PDFBox 2.0.2 版
以前有人遇到过这个吗?
【问题讨论】:
-
请用 2.0.3 重新测试
-
感谢@TilmanHausherr - 我已经用新版本进行了测试,并且遇到了同样的问题。我刚刚创建了一张我认为可以解决问题的改进票 - issues.apache.org/jira/browse/PDFBOX-3521