Как интерпретировать PDF-файлы
Существует несколько основных методов извлечения текста из PDF файлов в .NET:
- Microsoft IFilter interface и Adobe IFilter implementation;
- iTextSharp;
- PDFBox.
Эти методы PDF-интерпретации неидеальны. Ниже подробно рассмотрим каждый из них.
-
Разбор PDF с помощью Adobe PDF IFilter
Для того, чтобы разобрать PDF-файлы с помощью IFilter, Вам понадобится:
- Adobe Acrobat или Reader 7.0.5+ (или автономный Adobe PDF IFilter);
- IFilter COM wrapper class.
Пример кода:
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
Статьи по схожей тематике