PDFBox - гарантируется ли порядок чтения с помощью processTextPosition PDFTextStripper?

Я использую PdfTextStripper (PDFBox 1.8.2) для обработки каждого TextPosition в файле PDF. Я протестировал множество файлов и заметил, что он обрабатывает текст в порядке чтения. Однако это не работает, если в pdf есть нижние колонтитулы (docx, который я экспортировал как pdf). pdfTextStripper сначала обрабатывает нижний колонтитул, а затем тело файла.

Это ожидаемое поведение? Можно ли как-то уточнить порядок? или есть ли способ определить его нижний колонтитул и внести коррективы в свой код?


person Pradhan    schedule 19.07.2013    source источник


Ответы (1)


PdfTextStripper имеет атрибут SortByPosition (getSortByPosition и setSortByPosition). По умолчанию это false.

Если этот атрибут равен false,, PdfTextStripper по существу извлекает текст в том порядке, в котором он появляется в потоке содержимого страницы PDF.

Этот порядок может быть полностью искажен (поскольку в потоке контента вы используете операторы, которые могут расположить следующий печатный текст в любом месте на странице), но часто текстовые разделы, связанные вместе, сохраняются вместе (поскольку операции, необходимые для таких разделов, часто вставляются в этот поток). как блок).

Однако верхние и нижние колонтитулы часто добавляются одновременно и поэтому появляются вместе до или после основного основного текста.

Однако, если этот атрибут равен true,, PdfTextStripper по существу извлекает текст сверху вниз, слева направо (если не определен порядок чтения справа налево). (Ладно, ладно, это тоже касается статичных бусин, но вряд ли можно рассчитывать на то, что они будут использоваться вообще.)

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

Кстати, вы можете отключить использование бусинок статей, используя атрибут ShouldSeparateByBeads (getSeparateByBeads и setShouldSeparateByBeads).

person mkl    schedule 19.07.2013