PDFBox NPE загрузка шрифтов

#java #pdfbox

#java #pdfbox

Вопрос:

Я использую PDFBox для извлечения текста из нескольких документов PDF и во время запуска моего набора модульных тестов (через gradle) Я получаю периодические сбои, вызванные NullPointerException — мое базовое предположение теперь заключается в том, что это вызвано несколькими потоками, пытающимися одновременно загрузить шрифт в кэш font dictionaryanry.

Я знаю, как указано в часто задаваемых вопросах, что PDFBox не является потокобезопасным, но впечатление, которое я получил от этого и этого обсуждения здесь, заключается в том, что оно относится конкретно к нескольким потокам, обращающимся к документу одновременно, и комментарий, похоже, предполагает, что ожидается, что кэш fontbox будет потокобезопасным.

Исключение, которое я получаю в своем модульном тестировании, является:

 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

Кто-нибудь сталкивался с этим раньше?

Комментарии:

1. Пожалуйста, повторите тестирование с 2.0.3

2. Спасибо @TilmanHausherr — я протестировал новую версию и столкнулся с той же проблемой. Я только что создал заявку на улучшение, которое, я думаю, решает проблему — issues.apache.org/jira/browse/PDFBOX-3521

Ответ №1:

Это было исправлено в библиотеке PDFBox с версии 2.0.4

Подробности в исходном билете здесь: https://issues.apache.org/jira/browse/PDFBOX-3521