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

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

Наилучший подход, который я нашел до сих пор, - это написать сценарий для анализа почти действительного вывода xml (комментарии недействительны, и многие символы экранированы различными способами, é становится [[[e9]]] é, $ становится \ $,% становится \% ...) утилиты командной строки pdftoipe (для преобразования файлов PDF для программы под названием ипе), которая дает мне текстовые элементы с их позициями на каждой странице [см. пример ниже], которая работает достаточно хорошо для отчетов, в которых одни и те же значения находятся в одном и том же месте на каждой интересующей меня странице, но для импорта файлов 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>
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
Включение UTF-8 в jsPDF с помощью Angular
Включение UTF-8 в jsPDF с помощью Angular
Привет, разработчики, я предполагаю, что вы уже знаете, как экспортировать pdf через jsPDF. Если ответ отрицательный, то вы можете ознакомиться с моей...
4
0
11 077
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

http://www.aspose.com/

Я не верю, что это то, что я ищу. Aspose.Pdf.Kit, похоже, только выводится. Можете быть более конкретными?

sphereinabox 16.01.2009 21:23
Ответ принят как подходящий

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

pdftoipe основан на коде Xpdf. К сожалению, это лучший ответ на данный момент: самостоятельно модифицировать Xpdf в соответствии со своими потребностями.

sphereinabox 16.01.2009 21:23

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

pdftohtml -xml

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

Другие вопросы по теме