Руководство пользователя pdfbeads версии 1.1

(c) Алексей Крюков, 2013

Утилита pdfbeads предназначена для создания электронных книг в формате PDF из предварительно обработанных отсканированных страниц. В отличие от других подобных программ, pdfbeads стремится строить PDF-файлы по модели, более привычной для формата DJVU, разделяя страницу на слои, различающиеся форматом сжатия данных и разрешением.

Среди возможностей pdfbeads:

Название pdfbeads связано с тем, что сборка электронной книги из отдельных графических файлов может быть уподоблена нанизыванию бус. Кроме того, оно представляется вполне уместным для сценария, написанного на языке Ruby: ведь драгоценные камни, подобные рубину, как раз и служат для создания ювелирных украшений.

Требования

Для запуска программы требуется прежде всего интерпретатор языка Ruby версии 1.8 или выше, доступный в дистрибутивах большинства Unix-подобных систем. Версия для Windows может быть загружена с сайта RubyInstaller. Для корректной установки pdfbeads необходимо также загрузить пакетный менеджер RubyGems, представляющий собой стандартный интерфейс языка Ruby для работы с расширениями. Кроме того, в дополнение к основному дистрибутиву Ruby понадобятся расширения RMagick, Nokogiri (для обработки распознанного текста в формате hOCR) и PDF::Reader (для считывания распознанного текста из другого PDF-файла).

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

Установка

Для того, чтобы скачать и установить наиболее свежую версию pdfbeads с помощью пакетного менеджера RubyGems, достаточно набрать в командной строке

gem install pdfbeads

Перед запуском программы необходимо удостовериться, что расширение RMagick установлено и доступно интерпретатору Ruby. К сожалению, эту зависимость нельзя отследить автоматически, поскольку в некоторых дистрибутивах Linux (в частности, Ubuntu) пакет RMagick устанавливается в обход механизма RubyGems, так что утилите gem о нем ничего не известно.

Пользователям Ubuntu также следует иметь в виду, что в этом дистрибутиве исполняемые файлы из пакетов gem по умолчанию распаковываются в каталоги /var/lib/gems/1.8/bin и /var/lib/gems/1.9.1/bin (для Ruby 1.8 и 1.9 соответственно), изначально не включенные в переменную окружения PATH. Поэтому для того, чтобы утилиту pdfbeads можно было запускать без указания полного пути к ней, нужно либо соответствующим образом модифицировать переменную PATH, либо переместить файл pdfbeads в одну из директорий, традиционно используемых для размещения исполняемых файлов (например, /usr/local/bin).

Общие принципы

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

«Основными» считаются файлы, содержащие отсканированный текст, который может быть использован в качестве переднего плана (маски). Как правило, в этой роли должны выступать предварительно бинаризованные текстовые страницы. Кроме того, pdfbeads может обрабатывать малоцветные индексированные изображения с белым или прозрачным фоном, а также смешанные изображения, сочетающие бинаризованный текст с полутоновыми иллюстрациями. Последняя возможность наиболее полезна для работы с файлами, полученными при помощи программы ScanTailor.

Специальной обработке подвергаются файлы с двойным расширением, где расширению, указывающему на один из графических форматов (TIF(F), PNG, JP(E)G, JP2, JPX), предшествует один из следующих суффиксов:

bg или sep

Фоновое изображение (полутоновое или индексированное);

fg

Изображение, предназначенное для раскраски текстового слоя (подобно блоку FG44 в DJVU);

color

Полноцветный скан, служащий источником для формирования файлов с суффиксами *.bg.* и *.fg.*;

Спецификация цвета (напр. black или #ff00ff)

Бинаризованное изображение, для отрисовки которого следует использовать указанный цвет.

Кроме того, при наличии в текущей директории HTML-файлов с расширением HTM(L) или HOCR, содержащих распознанный текст в формате hOCR, pdfbeads будет использовать их для формирования скрытого текстового слоя в PDF-файле.

Некоторые из перечисленных выше видов вспомогательных файлов могут создаваться pdfbeads в качестве промежуточного этапа работы. Поскольку обработка изображений с помощью библиотеки ImageMagick, на которой основывается pdfbeads, иногда занимает довольно много времени, эти файлы в дальнейшем не удаляются с диска и могут быть повторно использованы при последующих прогонах в целях экономии времени. Для того, чтобы заставить pdfbeads заменить такие файлы заново созданными версиями, можно запустить его с ключом -f или --force-update.

pdfbeads предназначен для сборки PDF из предварительно обработанных сканов, чем объясняются некоторые особенности работы программы:

Начало работы с программой

Программа использует следующий формат запуска из командной строки:

pdfbeads [options] [files to process] [> output_file.pdf]

Список файлов для обработки может быть либо получен из листинга текущей директории, либо задан напрямую в командной строке. В обоих случаях pdfbeads проверяет имена файлов на соответствие определенному шаблону: к обработке принимаются только изображения TIF(F) или PNG (регистр букв не имеет значения), причем расширению файла не должно предшествовать никаких дополнительных суффиксов, отделенных точками. Это связано с тем, что двойные расширения используются программой для маркировки вспомогательных файлов, имеющих специальное назначение.

Вместо записи PDF-файла на стандартное устройство вывода можно использовать ключ -o или --output, сопроводив ее указанием имени файла.

Обработка бинаризованных изображений

Для формирования переднего плана, или «маски», на странице PDF-документа, используются «основные» файлы отсканированных страниц, поданные на вход pdfbeads. При этом программа руководствуется следующими правилами:

Для черно-белых текстовых страниц рекомендуется использовать формат TIFF со сжатием данных CCITT Group 4 fax, поскольку pdfbeads в большинстве случаев в состоянии считывать данные из таких файлов без обращения к библиотеке ImageMagick, что существенно увеличивает скорость обработки.

По умолчанию передний план страницы упаковывается с помощью технологии сжатия JBIG2, для чего pdfbeads использует утилиту jbig2enc (автор — Адам Лэнгли). При этом можно задать ключ -p (--pages-per-dict), чтобы указать желательное количество страниц, использующих общий словарь разделенных символов (по умолчанию — 15).

Если утилита jbig2enc недоступна, либо при запуске pdfbeads был указан ключ -m (--mask-compression) с аргументом `G4' (синонимы — `Group4', `CCITTFax'), то вместо JBIG2-сжатия будет использоваться формат CCITT Group 4 fax.

Обработка полутоновых изображений

Полутоновые изображения используются в качестве фона PDF-страницы, который, как правило, должен иметь меньшее разрешение, чем маска. pdfbeads может взять фоновое изображение непосредственно с жесткого диска (из файла с дополнительным расширением bg или sep) либо сформировать его путем разделения смешанного файла.

При обработке смешанных файлов картинки прежде всего отделяются от текста, для чего все черные пиксели окрашиваются белым цветом. Полученное изображение сохраняется на диск с учетом следующих параметров командной строки:

-b, --bg-compression

Формат сжатия данных. Допускаются значения `JPEG2000' (с синонимами `JP2' или `JPX'), `JPEG' (с синонимом `JPG'), а также `LOSSLESS' (синонимы — `DEFLATE', `PNG'). Если используемая сборка библиотеки ImageMagick поддерживает формат JPEG2000, по умолчанию используется именно он; в противном случае — JPEG. Если выбрано значение LOSSLESS, то pdfbeads будет использовать для сжатия изображений технологию deflate. Следует иметь в виду, что это может привести к значительному возрастанию объема данных по сравнению с форматами JPEG2000 или JPEG.

-B, --bg-resolution DPI

Разрешение для фонового слоя. Разумные значения обычно лежат в пределах 150–300 dpi (по умолчанию — 300).

-g, --grayscale

Заставляет pdfbeads принудительно конвертировать цветные картинки в оттенки серого. Данный ключ может быть полезен в том случае, если исходные сканы были выполнены в цвете, но фактически содержали только черно-белые картинки, причем преобразование в оттенки серого не было выполнено на этапе первичной сканобработки. Такая ситуация часто возникает, в частности, при обработке цифровых фотографий с помощью программы ScanTailor.

Если pdfbeads загружает готовое фоновое изображение с диска, то какая-либо дополнительная обработка уже не производится. Картинки JPEG и JPEG2000 вставляются в PDF-файл без изменений, а изображения, считанные из файлов TIFF и PNG, сжимаются по технологии deflate. Однако при наличии нескольких одноименных файлов, различающихся лишь расширением, предпочтение того или иного графического формата определяется значением параметра --bg-compression.

Сегментация полноцветных изображений по заданной маске

Разделение отсканированного изображения на слои связано с особыми сложностями в тех случаях, когда текст напечатан поверх рисунка или текстуры. Для того, чтобы упаковать такую страницу в pdf с помощью pdfbeads, необходимо подготовить два графических файла:

Первый из двух файлов будет использован в качестве шаблона: руководствуясь его начертаниями, pdfbeads постарается сформировать из полноцветного скана два новых изображения, причем первое (с суффиксом *.bg.*) будет содержать фон, освобожденный от текстовых данных, а на втором (с суффиксом *.fg.*) останутся только элементы маски с присущей им текстурой. Данная процедура по смыслу напоминает операцию, осуществляемую утилитой djvumake при указании ключа PPM, и имеет ту же самую цель: создание трехслойной страницы, где один из полноцветных слоев отвечает за отображение фона, а другой — за раскраску наложенной на этот фон маски.

Для достижения желаемого результата необходимо, чтобы шаблон накладывался на полноцветное изображение без каких-либо сдвигов и искажений. В то же время разрешение этих двух изображений (и, соответственно, их пиксельные размеры) может быть различным: в этом случае на этапе сегментации будет использоваться копия шаблона, масштабированная до размеров цветной картинки. Если весь текст на странице набран черным цветом (или, по крайней мере, темнее фона), то для создания обоих файлов удобно использовать программу ScanTailor: для этого нужно вывести одну и ту же страницу сначала в режиме «черно-белый», а затем — в режиме «цветной/серый».

Следует иметь в виду, что в случае, если шаблон представлен малоцветным индексированным изображением, файл с суффиксом *.fg.* создан не будет: вместо этого на очищенный от текстовых данных фон будет наложена маска с изначально заданными цветами.

В заключение этого раздела отметим, что используемый pdfbeads алгоритм сегментации по заданной маске появился под влиянием дискуссии на форуме ImageMagick, где обсуждались возможные способы удаления текста с картинки с последующим заполнением образовавшихся «дырок» исходя из значений соседних пикселей.

Дополнительные возможности

Добавление метаданных

Для того, чтобы созданный pdfbeads PDF-документ содержал данные об авторе, заглавии книги и т. д., необходимо предварительно занести эти данные в специальный текстовый файл в кодировке ASCII или UTF-8. Каждая строка такого файла должна иметь формат

<KEYWORD>: "Текст"

В настоящее время в качестве ключевых слов распознаются Title, Author, Subject и Keywords. Строки, начинающиеся с символа `#', считаются комментариями и игнорируются.

Ссылку на созданный файл можно передать pdfbeads с помощью ключа -M (или --meta).

Метки страниц

pdfbeads позволяет задать метки страниц, которые могут быть использованы просмотрщиком PDF вместо их порядковых номеров. Таким образом можно привести нумерацию страниц электронного документа в соответствие с нумерацией страниц бумажной книги. Для этой цели pdfbeads использует параметр -L (или --labels). Аргумент этого параметра обязательно заключается в кавычки и может состоять из одной или нескольких спецификаций диапазонов нумерации, отделенных друг от друга символом точки с запятой.

Диапазон нумерации формируется из следующих компонентов (каждый из них может быть опущен):

Предположим, например, что книга начинается с двух ненумерованных титульных страниц, после чего следуют 32 страницы, пронумерованных римскими цифрами, а далее идет арабская нумерация, которая, однако, начинается сразу с 33. В таком случае целесообразно задать следующий аргумент для параметра --labels:

"0:Титул %D;2:%R;34:%33D"

Добавление оглавления

pdfbeads предусматривает возможность добавить оглавление к создаваемому PDF-файлу. Для этого используется параметр -C (или --toc), принимающий в качестве аргумента путь к текстовому файлу.

Файл оглавления должен иметь кодировку UTF-8 и состоять из строк, оформленных по следующему образцу (строки, начинающиеся с символа `#', игнорируются):

<отступ>"Заголовок" "Номер страницы" [0|-|1|+]

Уровень вложенности заголовка определяется его отступом (последний может состоять из пробелов или табуляторов, но одновременное использование тех и других в пределах одного файла не допускается). После отступа идут поля заголовка и номера страницы, которые разделяются любым числом пробельных символов и при необходимости заключаются в кавычки. Последний, необязательный параметр указывает, должен ли данный пункт оглавления отображаться развернутым по умолчанию (символы `+' и `1' означают «да»).

Ключ --toc целесообразно использовать в сочетании с ключом --labels. В этом случае в файле оглавления можно использовать те же номера страниц, что и в бумажной книге, не задумываясь о сдвигах нумерации.

Добавление текстового слоя

pdfbeads позволяет создавать документы PDF со скрытым текстовым слоем. Последний может быть либо получен из файлов в формате hOCR (расширение языка HTML, позволяющее сохранять в документе информацию о положении символов и элементов разметки текста на странице), либо импортирован из другого PDF-файла.

Для создания файлов в формате hOCR необходимо воспользоваться программой оптического распознавания символов, поддерживающей этот формат, например Cuneiform или Tesseract. Распознанный текст следует сохранить в той же директории, что и остальные файлы, относящиеся к проекту. При этом каждой распознанной странице должен соответствовать отдельный файл с тем же базовым именем, что и у исходного изображения, при расширении HTM(L) или HOCR. Обработка файлов hOCR осуществляется автоматически при условии, что интерпретатору Ruby доступно расширение Nokogiri.

Иное возможное решение заключается в том, чтобы импортировать текстовый слой из другого PDF-файла (естественно, последний должен быть получен путем распознавания тех же самых изображений, которые предполагается затем обработать с помощью pdfbeads). Имя полученного файла следует передать pdfbeads с помощью ключа -T (полная форма — -text-pdf). Эта возможность особенно важна в тех случаях, когда приходится использовать для распознавания текста коммерческое приложение (например, ABBYY Finereader), в котором не предусмотрена поддержка формата hOCR. Внимание: возможно, вам придется поэкспериментировать с настройками экспорта PDF в OCR-приложении для того, чтобы получить наилучшее соответствие между размещением распознанного текста на странице и исходным изображением. В частности, в ABBYY Finereader 11-й версии желаемый результат достигается только при сохранении файла в режиме «текст под изображением».

Обработка документов с направлением текста справа налево

Ключ -R (или --right-to-left позволяет сохранить в создаваемом файле пометку, указывающую на то, что основной язык данного документа предполагает направление чтения справа налево. Данный флажок используется Acrobat Reader при выборе порядка следования страниц в режиме их попарного отображения.

Лицензия

Данная программа является свободным программным обеспечением. Вы вправе распространять ее и/или модифицировать в соответствии с условиями версии 2 либо по вашему выбору с условиями более поздней версии Стандартной Общественной Лицензии GNU, опубликованной Free Software Foundation.

Мы распространяем данную программу в надежде на то, что она будет вам полезной, однако НЕ ПРЕДОСТАВЛЯЕМ НА НЕЕ НИКАКИХ ГАРАНТИЙ, в том числе ГАРАНТИИ ТОВАРНОГО СОСТОЯНИЯ ПРИ ПРОДАЖЕ и ПРИГОДНОСТИ ДЛЯ ИСПОЛЬЗОВАНИЯ В КОНКРЕТНЫХ ЦЕЛЯХ. Для получения более подробной информации ознакомьтесь со Стандартной Общественной Лицензией GNU.

Вместе с данной программой вы должны были получить экземпляр Стандартной Общественной Лицензии GNU. Если вы его не получили, сообщите об этом в Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.