ITVDN logo
Видеокурсы по
программированию

Доступ более чем к 7700 видеоурокам от $19.99

Подписка
ITVDN logo
Видеокурсы по
программированию

Доступ более чем к 7700 видеоурокам от $19.99

Подписка

Как интерпретировать PDF-файлы

Существует несколько основных методов извлечения текста из PDF файлов в .NET:

  • Microsoft IFilter interface и Adobe IFilter implementation;
  • iTextSharp;
  • PDFBox.

Эти методы PDF-интерпретации неидеальны. Ниже подробно рассмотрим каждый из них.


  1. Разбор PDF с помощью Adobe PDF IFilter

Для того, чтобы разобрать PDF-файлы с помощью IFilter, Вам понадобится:

Пример кода:

using IFilter;

// ...

public static string ExtractTextFromPdf(string path) {

       return DefaultParser.Extract(path);

}

Загружаем пример проекта:

Интерпретация PDF-файлов, используя IFilter

Если Вы используете PDF IFilter, работующий с Adobe Acrobat Reader, Вам нужно переименовать процесс "filtdump.exe", иначе интерфейс IFilter вернёт код ошибки E_NOTIMPL. Детально смотрите на Parsing PDF Files using IFilter.

Недостатки:

1. Использование ненадежного COM Interop. Он обрабатывает интерфейс IFilter (сочетание IFilter COM и Adobe PDF IFilter может быть проблематичным).

2. Раздельная установка Adobe IFilter на целевой системе. Неудобно распространять индексное решение другим пользователям.

3. Нужно использовать имя файла "filtdump.exe" для Вашего приложения с последним PDF IFilter, прилагающимся к Acrobat Reader.

     2. Разбор PDF с помощью iTextSharp

iTextSharp – .NET порт  iText, PDF библиотеки для Java. Его основная функция – создание, а не чтение PDF-файлов, но он также позволяет извлекать текст из PDF-файлов.

Пример кода:

using iTextSharp.text.pdf;

using iTextSharp.text.pdf.parser;

// ...

public static string ExtractTextFromPdf(string path)

{

       using (PdfReader reader = new PdfReader(path))

       {

              StringBuilder text = new StringBuilder();

              for (int i = 1; i <= reader.NumberOfPages; i++)

              {

                     text.Append(PdfTextExtractor.GetTextFromPage(reader, i));

              }

              return text.ToString();

       }

}

Загружаем пример проекта:

Интерпретация PDF-файлов с iTextSharp

Вы можете использовать LocationTextExtractionStrategy, чтобы получить более высокую точность.

public static string ExtractTextFromPdf(string path)

{

       ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();

       using (PdfReader reader = new PdfReader(path))

       {

              StringBuilder text = new StringBuilder();

              for (int i = 1; i <= reader.NumberOfPages; i++)

              {

                     string thePage = PdfTextExtractor.GetTextFromPage(reader, i, its);

                     string[] theLines = thePage.Split('\n');

                     foreach(var theLine in theLines)

                     {

                            text.AppendLine(theLine);

                     }

              }

              return text.ToString();

       }

}

Недостатки iTextSharp:

Лицензирование, если Вы недовольны AGPL лицензией.

      3. Разбор PDF с помощью PDFBox

PDFBox – другая Java PDF библиотека. Она может использоваться с оригинальной Java Lucene (LucenePDFDocument).

К счастью, существует .NET версия PDFBox, созданная с помощью IKVM.NET (загрузите  PDFBox package).

Для использования PDFBox в .NET требуется:

1. Добавление ссылок:

  • IKVM.OpenJDK.Core.dll
  • IKVM.OpenJDK.SwingAWT.dll
  • pdfbox-1.8.7.dll

2. Копирование таких файлов каталога Bin:

  • commons-logging.dll
  • fontbox-1.8.7.dll
  • IKVM.OpenJDK.Text.dll
  • IKVM.OpenJDK.Util.dll
  • IKVM.Runtime.dll

Использование PDFBox для разбора файлов PDF достаточно простое:

using org.apache.pdfbox.pdmodel;

using org.apache.pdfbox.util;

// ...

private static string ExtractTextFromPdf(string path)

{

       PDDocument doc = null;

       try {

              doc = PDDocument.load(path)

                     PDFTextStripper stripper = new PDFTextStripper();

              return stripper.getText(doc);

       }

       finally {

              if (doc != null) {

                     doc.close();

              }

       }

}

Загружаем пример проекта:

Как конвертировать PDF в текст в C# (.NET)

Как конвертировать PDF в текст VB (.NET)

Размер требуемой сборки составит почти 18 Мбайт:

  • IKVM.OpenJDK.Core.dll (4 MB)
  • IKVM.OpenJDK.SwingAWT.dll (6 MB)
  • pdfbox-1.8.7.dll (4 MB)
  • commons-logging.dll (82 kB)
  • fontbox-1.8.7.dll (180 kB)
  • IKVM.OpenJDK.Text.dll (800 kB)
  • IKVM.OpenJDK.Util.dll (2 MB)
  • IKVM.Runtime.dll (1 MB)

Недостатки:

1. IKVM.NET Dependencies (18 MB).

2. Скорость (особенно скорость IKVM.NET).

Источник: http://www.codeproject.com/Articles/12445/Converting-PDF-to-Text-in-C

СТАТЬИ ПО СХОЖЕЙ ТЕМАТИКЕ
ВИДЕО КУРСЫ ПО СХОЖЕЙ ТЕМАТИКЕ
КОМЕНТАРИИ И ОБСУЖДЕНИЯ
ОЦЕНИТЕ ДАННЫЙ МАТЕРИАЛ

ПОДПИСКА НА ITVDN ВЫГОДА ДО 29.95$ НА ОБУЧЕНИЕ ПРЕСТИЖНЫМ ПРОФЕССИЯМ!

1 месяц19.99$
подписка

легкий старт в обучении

3 месяца49.99$
подписка

выгода от подписки до9.98$

6 месяцев89.99$
подписка

выгода от подписки до29.95$