Прочитайте содержимое сотен PDF-файлов за один раз

Практическая задача: извлечь первые несколько строк из каждого файла PDF, содержащегося в определенной папке.

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

В следующем примере решения мы иллюстрируем подход, включающий использование Visual Studio и PDFBox, библиотеки с открытым исходным кодом, которая значительно упрощает управление документами в формате PDF.

Следующее решение было разработано с использованием Visual Basic 2005 Express Edition, но ничто не мешает использовать версию пакета Microsoft 2008 года (см. Эта страница для скачивания).

PDFBox предоставляет инструменты для извлечения текста из PDF-документов, объединения нескольких файлов, выполнения кодирования и декодирования, заполнения форм в PDF-файлах, создания изображений из отдельных страниц, составляющих PDF-файлы, печати документов, проведения исследований.

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

После запуска нового проекта в Visual Basic вам придется создать пару текстовых полей внутри основной формы (Form1), назвав их (свойство Name) соответственно txtTesto (верхнее) и txtErrori (нижнее).

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

Кнопка «Приступить» (она будет называться cmdProcedi) позволит вам начать анализ содержимого PDF-документов.

Наконец, хорошо добавить две метки: в первой (lblFiles) разрабатываемое приложение будет показывать анализируемые файлы. Вторая метка, с другой стороны, используется только для того, чтобы разъяснить тем, кто будет использовать приложение, какой контент будет отображаться во втором текстовом поле (PDF-документы, которыми нельзя управлять).

Свойства FormBorderStyle, MaximizeBox и StartPosition можно поместить на FixedSingle, False и CenterScreen соответственно, чтобы изменить внешний вид окна. Свойство формы Текст, как обычно, позволяет изменить тип окна (т.е. Импорт заголовка PDF).

Свойство ScrollBars двух текстовых полей хорошо размещать на Vertical, чтобы вызвать появление вертикальных полос прокрутки.

Добавить ссылки на PDFBox

На этом этапе необходимо добавить ссылки на библиотеки PDFBox. Чтобы продолжить, просто нажмите в меню «Проект», «Добавить ссылку…», выберите вкладку «Обзор», перейдите в папку, в которую вы ранее извлекли содержимое пакета PDFBox, и добавьте следующие файлы:
IKVM.GNU.Classpath.dll
PDFBox-0.7.3.dll
IKVM.Runtime.dll
FontBox-0.1.0-dev.dll


В окне кода в Visual Basic сначала нужно ввести следующее:
Импортирует System.IO
Импортирует org.pdfbox.pdmodel
Импортирует org.pdfbox.util

Написание кода

Функция parseUsingPDFBox позволит вам извлечь содержимое файла PDF в виде текста:
Частная функция parseUsingPDFBox (имя файла ByVal как строка) как строка
Dim doc As PDDocument = PDDocument.load(имя файла)
Dim Stripper As PDFTextStripper = New PDFTextStripper()
Пытаться
Вернуть стриппер.getText(doc)
Поймать
txtErrori.Text = txtErrori.Text + vbCrLf + имя файла
Возвращение «»
Завершить попытку
Конечная функция

Внутри события Click кнопки cmdProcedi вы можете вставить следующее:

Затемнить sPDF как строку
Dim s как целое число = 0
Дим я
Dim stringa As String
Dim c As Long = 1

Dim размер как целое число

txtTesto.Text = «»
txtErrori.Text = «»
cmdProcedi.Enabled = Ложь

Dim strFileSize As String = «»
Dim directory As New IO.DirectoryInfo(Application.StartupPath)
Dim filesArray As IO.FileInfo() = directory.GetFiles(«*.pdf»)
Затемнить файл как IO.FileInfo

размер = filesArray.GetLength (размер)

Для каждого файла в массиве файлов
sPDF = parseUsingPDFBox(file.FullName)
с = 0

Для i = от 1 до 20
s = InStr(s + 1, sPDF, vbCrLf)
Следующий

строка = середина (sPDF, 1, с)
stringa = Заменить(stringa, vbCrLf, » «)
txtTesto.Text = txtTesto.Text + vbCrLf + vbCrLf + «-» + file.Name + » » + строка

lblFiles.Text = CStr (c) + «di» + CStr (размер)
с = с + 1

Приложение.DoEvents()

Следующий

MessageBox.Show («Операция завершена.», «Информация», MessageBoxButtons.OK, MessageBoxIcon.Информация)
cmdProcedi.Enabled = Истина

Как видите, сначала список PDF-файлов, содержащихся в папке приложения, помещается внутрь массива. Папка, в которой выполняется поиск PDF-документов, — это та же папка, из которой запускается приложение, а именно Application.StartupPath. Это поведение можно свободно изменять, предоставляя, например, внешний вид диалогового окна (FolderBrowserDialogo или OpenFileDialog), которое позволяет пользователю выбрать интересующую папку или файлы.

Для каждого элемента, содержащегося в массиве (цикл For… Next, вызывается функция parseUsingPDFBox, которая возвращает содержимое PDF-документа в текстовом формате (строковая переменная sPDF).

Следующий цикл For позволяет идентифицировать первые двадцать строк текста, содержащегося в просматриваемом PDF-документе. При двадцатом выполнении цикла For в переменной s отмечается позиция последнего «разрыва» (vbCrLf).

Это значение (переменная s) передается функции Mid, которая позаботится об извлечении ряда символов, начиная с начала текста, извлеченного из PDF (переменная sPDF), в соответствии со значением s.

Впоследствии собранный текст добавляется внизу текстового поля txtTesto.

Следующая инструкция обновляет содержимое ярлыка lblFiles, чтобы он отображал файл, над которым вы работаете, и общее количество PDF-документов, хранящихся в папке.

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

Доступна дополнительная информация об использовании PDFBox. на этих страницах.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.