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

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

    Подписка

    Выбери свою 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 $
      Оформить подписку
      Базовый
      • Все видеокурсы на 6 месяцев
      • Тестирование по 16 курсам
      • Проверка 10 домашних заданий
      • Консультация с тренером 60 мин
      89.99 $
      Оформить подписку
      Премиум
      • Все видеокурсы на 1 год
      • Тестирование по 24 курсам
      • Проверка 20 домашних заданий
      • Консультация с тренером 120 мин
      169.99 $
      Оформить подписку
      Notification success
      Мы используем cookie-файлы, чтобы сделать взаимодействие с нашими веб-сайтами и услугами простым и значимым.