Конвертирование PDF в текст в C# - Блог ITVDN
ITVDN: курсы программирования
Видеокурсы по
программированию

Выбери свою IT специальность

Подписка

Конвертирование PDF в текст в C#

advertisement advertisement

Как интерпретировать 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

КОММЕНТАРИИ И ОБСУЖДЕНИЯ
advertisement advertisement

Покупай подпискус доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

Стартовый
  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
59.99 $
Оформить подписку
Премиум Plus
  • Все видеокурсы на 1 год
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин
  • Скачивание видео уроков
199.99 $
Оформить подписку
Базовый
  • Все видеокурсы на 6 месяцев
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
89.99 $
Оформить подписку
Notification success