2016-01-28 17 views
1

См. Прилагаемый документ K-1. Я попытался использовать многочисленные твики с библиотекой iTextSharp, но не успел правильно загрузить данные.Parsing Complex PDF-документ с C#

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

 var reader = new PdfReader(FILE, Encoding.ASCII.GetBytes(password)); 
     string[] lines; 
     var strategy = new LocationTextExtractionStrategy(); 
     string currentPageText = PdfTextExtractor.GetTextFromPage(reader, 1, strategy); 
     lines = currentPageText.Split(new string[] {"\r\n", "\n"}, StringSplitOptions.None); 

Я также пробовал играть с обработкой аннотаций, но не повезло.

Я новичок и, вероятно, смотрю не туда. Можете ли вы помочь мне в правильном направлении?

Большое спасибо.

enter image description here

+0

* В идеале я хотел бы проанализировать документ, похожий на то, как люди будут их читать, по одному текстовому блоку за раз, считывая его содержимое. * - Это означает, что вам сначала придется попробовать и программно распознать эти текстовые поля. Вы можете извлечь текст по этим разделам. Для новичков это не тривиальная задача. – mkl

+0

ну, я разработчик программного обеспечения, владеющий C#. У меня просто нет большого опыта анализа PDF-файлов. можете ли вы поделиться примером кода? – Ros

ответ

1

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

К автоматически распознает эти текстовые поля в вашем документе, вы должны извлечь пограничные линии, содержащие коробки. Для этого вам сначала нужно выяснить, как создаются эти пограничные линии. Они могут быть нарисованы с использованием векторной графики в виде линий или прямоугольников, но они также могут быть частью фонового изображения растрового изображения.

К сожалению, у меня нет вашей формы IRS под рукой, и поэтому я не могу проанализировать ее внутренности. Предположим, что границы теперь созданы с использованием векторной графики. Таким образом, вам нужно извлечь векторную графику.

К экстракту векторной графики с IText (Sharp), вы используете классы от IText (Sharp) парсер имен, делая их анализ документа и покормить синтаксические анализ событий в качестве слушателя вы создаете, который собирает векторную графику операции:

  • Вы реализуете IExtRenderListener, в частности, его ModifyPath и RenderPath методы, которые соответственно называются, когда дополнительные элементы пути (например, линии или прямоугольники) добавляются к текущему пути или когда путь тока оказывается (погладил заполненным? ?). Ваша реализация собирает эту информацию.
  • Вы разбираете свой документ в экземпляр вашего слушателя, например. используя PdfReaderContentParser.
  • Вы анализируете найденные строки и прямоугольники и получаете координаты полей, которые они создают.
  • Вы анализируете ту же страницу в экземпляре LocationTextExtractionStrategy.
  • Вы извлекаете тексты распознанных текстовых полей, вызывая LocationTextExtractionStrategy.GetResultantText с соответствующим аргументом ITextChunkFilter для каждого окна.

(На самом деле вы можете сделать разбор в экземпляр вашего слушателя и LocationTextExtractionStrategy, например, в один проходе для немного оптимизации.)

Всех IText (Sharp) конкретные задачи тривиальны, и только другая задача, анализ линий и прямоугольников, найденных для получения координат ящиков, не должно быть большой проблемой для разработчика программного обеспечения, владеющего C#.

2

Первый вопрос, если эта форма является электронной или отсканированной? последний сделает извлечение данных намного сложнее, так как он должен также включать OCR.

в случае, если у вас есть электронный PDF, и если у вас есть все подобные формы, то почему бы вам не просто использовать следующую стратегию:

  • магазин координаты каждого «ящика» в конфигурационном файле
  • оформлять документы и exract текст из каждого «ящика» (т.е. область)
  • дополнительного процесс извлеченного текста с регулярными выражениями в отдельное имя от адреса (или, может быть, вы можете просто установить область, чтобы прочитать текст из построчно)

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

Этот подход должен работать с любой библиотекой PDF.

0

Посмотрите на библиотеку и редактор шаблонов IvyPdf. Он использует C# и предоставляет высокоуровневые функции для анализа и извлечения данных, поэтому вам не нужно иметь дело с внутренними документами PDF. Вы можете создавать довольно сложные сценарии, используя его.

Я не думаю, что он может читать аннотации.