Каков наилучший способ импорта / чтения данных из PDF-файлов?

Мы получаем большой объем данных от наших клиентов в pdf-файлах в различных форматах [с разбивкой по разметке], эти файлы обычно представляют собой выходные данные отчета и, как правило, должным образом снабжаются комментариями [им обычно не требуется распознавание текста], но недостаточно форматируются, чтобы просто скопировать несколько сотен страниц текста из акробата не получится.

Наилучший подход, который я нашел до сих пор, - это написать скрипт для анализа почти правильного вывода xml (комментарии недействительны, а многие символы экранированы разными способами, é становится [[[e9]]] é, $ становится \ $,% становится \% ...) утилиты командной строки pdftoipe (для преобразования файлов pdf для программы под названием ipe ), которая дает мне текстовые элементы с их позициями на каждой странице [см. пример ниже], что работает достаточно хорошо для отчетов, в которых одинаковые значения находятся на одном и том же месте на каждой странице, которая мне нужна, но для импорта матричных PDF-файлов [кросс-таблица] потребуются дополнительные усилия по написанию сценариев. pdftoipe вообще не предназначен для этого, и в лучшем случае его можно скомпилировать вручную, используя cygwin для windows.

Существуют ли библиотеки, облегчающие это на каком-то языке сценариев, который я могу терпеть? Графический инструмент тоже был бы великолепен. И пони.

Вывод pdftoipe этого образца выглядит следующим образом:

<ipe creator="pdftoipe 2006/10/09"><info media="0 0 612 792"/>
<-- Page: 1 1 -->
<page gridsize="8">
<path fill="1 1 1" fillrule="wind">
64.8 144 m
486 144 l
486 727.2 l
64.8 727.2 l
64.8 144 l
h
</path>
<path fill="1 1 1" fillrule="wind">
64.8 144 m
486 144 l
486 727.2 l
64.8 727.2 l
64.8 144 l
h
</path>
<path fill="1 1 1" fillrule="wind">
64.8 144 m
486 144 l
486 727.2 l
64.8 727.2 l
64.8 144 l
h
</path>
<text stroke="1 0 0" pos="0 0" size="18" transformable="yes" matrix="1 0 0 1 181.8 707.88">This is a sample PDF fil</text>
<text stroke="1 0 0" pos="0 0" size="18" transformable="yes" matrix="1 0 0 1 356.28 707.88">e.</text>
<text stroke="1 0 0" pos="0 0" size="18" transformable="yes" matrix="1 0 0 1 368.76 707.88"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 692.4"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 677.88"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 663.36"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 648.84"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 634.32"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 619.8"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 605.28"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 590.76"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 576.24"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 561.72"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 547.2"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 532.68"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 518.16"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 503.64"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 489.12"> </text>
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 474.6"> </text>
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 67.32 456.24">If you can read this</text>
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 214.92 456.24">,</text>
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 219.48 456.24"> you already have A</text>
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 370.8 456.24">dobe Acrobat </text>
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 67.32 437.64">Reader i</text>
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 131.28 437.64">n</text>
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 141.12 437.64">stalled on your computer.</text>
<text stroke="0 0 0" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 337.92 437.64"> </text>
<text stroke="0 0.502 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 342.48 437.64"> </text>
<image width="800" height="600" rect="-92.04 800.64 374.4 449.76" ColorSpace="DeviceRGB" BitsPerComponent="8" Filter="DCTDecode" length="369925">
feedcafebabe...
</image>
</page>
</ipe>
25.08.2008 01:49:22
4 ОТВЕТА
РЕШЕНИЕ

Мы используем Xpdf в одном из наших приложений. Это библиотека c ++, которая в основном используется для рендеринга PDF, хотя она имеет экстрактор текста, который может быть полезен для этого проекта.

3
25.08.2008 03:48:40
pdftoipe основан на коде Xpdf. К сожалению, это лучший ответ на данный момент: измените сам Xpdf в соответствии со своими потребностями.
sphereinabox 16.01.2009 18:23:49

Вы смотрели на Aspose? Мы используем его для приложения ASP.net, и я видел несколько примеров использования vbscript. Это не особенно дорого либо.

http://www.aspose.com/

0
25.08.2008 02:05:22
Я не верю, что это то, что я ищу. Aspose.Pdf.Kit, кажется, только для вывода. Можете быть более конкретными?
sphereinabox 16.01.2009 18:23:06

Если вы можете вызывать что-то внешнее, вы можете использовать ghostscript - посмотрите на скрипт ps2ascii, включенный в дистрибутив. Я не уверен, что вы хотите от графического инструмента - большая кнопка, которую вы нажимаете, чтобы выбрать входной и выходной файлы? Предварительный просмотр? Вы можете использовать GSView, в зависимости от того, что вы хотите.

1
7.09.2008 05:40:18

pdftohtml -xml

хотя pdftoipe кажется более подробным !!

1
12.11.2010 22:41:47