(c) Алексей Крюков, 2013
Утилита pdfbeads предназначена для создания электронных книг в формате PDF из предварительно обработанных отсканированных страниц. В отличие от других подобных программ, pdfbeads стремится строить PDF-файлы по модели, более привычной для формата DJVU, разделяя страницу на слои, различающиеся форматом сжатия данных и разрешением.
Среди возможностей pdfbeads:
сжатие графических данных с использованием форматов JBIG2 и JPEG2000;
разделение «смешанных» файлов, созданных программой ScanTailor, на текстовый и картиночный слои;
подклейка фоновых изображений к предварительно бинаризованным текстовым страницам;
обработка малоцветных индексированных изображений с сохранением цвета и выносом содержимого в передний план;
разделение полноцветных изображений на фон и передний план по заданной маске;
создание PDF-файлов с оглавлением и метаданными;
добавление скрытого текстового слоя из документов в формате hOCR с корректной обработкой символов кириллицы либо перенос текста из другого PDF-файла.
Название 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), предшествует один из следующих суффиксов:
Фоновое изображение (полутоновое или индексированное);
Изображение, предназначенное для раскраски текстового слоя (подобно блоку FG44 в DJVU);
Полноцветный скан, служащий источником для формирования файлов с суффиксами *.bg.* и *.fg.*;
Бинаризованное изображение, для отрисовки которого следует использовать указанный цвет.
Кроме того, при наличии в текущей директории HTML-файлов с расширением HTM(L) или HOCR, содержащих распознанный текст в формате hOCR, pdfbeads будет использовать их для формирования скрытого текстового слоя в PDF-файле.
Некоторые из перечисленных выше видов вспомогательных файлов могут создаваться pdfbeads в качестве промежуточного этапа работы. Поскольку обработка изображений с помощью библиотеки ImageMagick, на которой основывается pdfbeads, иногда занимает довольно много времени, эти файлы в дальнейшем не удаляются с диска и могут быть повторно использованы при последующих прогонах в целях экономии времени. Для того, чтобы заставить pdfbeads заменить такие файлы заново созданными версиями, можно запустить его с ключом -f или --force-update.
pdfbeads предназначен для сборки PDF из предварительно обработанных сканов, чем объясняются некоторые особенности работы программы:
нет возможности как-то модифицировать сканы текстовых страниц, за исключением принудительного задания разрешения (предполагается, что они были созданы с желательными для пользователя настройками, так что дальнейшая обработка не требуется);
не предусмотрена бинаризация и сегментация необработанных сканов, выполненных в цвете или в оттенках серого. Исключение представляют случаи полуавтоматической обработки (разделение «смешанных» страниц, где бинаризованный текст сочетается с полутоновыми картинками; сегментация полноцветных изображений по заданной маске), когда pdfbeads лишь завершает работу, начатую с помощью других программ;
фоновые изображения, взятые непосредственно с жесткого диска пользователя, не подвергаются дополнительной обработке и кодируются «как есть».
Программа использует следующий формат запуска из командной строки:
pdfbeads [options] [files to process] [> output_file.pdf]
Список файлов для обработки может быть либо получен из листинга текущей директории, либо задан напрямую в командной строке. В обоих случаях pdfbeads проверяет имена файлов на соответствие определенному шаблону: к обработке принимаются только изображения TIF(F) или PNG (регистр букв не имеет значения), причем расширению файла не должно предшествовать никаких дополнительных суффиксов, отделенных точками. Это связано с тем, что двойные расширения используются программой для маркировки вспомогательных файлов, имеющих специальное назначение.
Вместо записи PDF-файла на стандартное устройство вывода можно использовать ключ -o или --output, сопроводив ее указанием имени файла.
Для формирования переднего плана, или «маски», на странице PDF-документа, используются «основные» файлы отсканированных страниц, поданные на вход pdfbeads. При этом программа руководствуется следующими правилами:
бинаризованные изображения в формате TIFF или PNG используются «как есть»;
страницы со смешанным содержимым освобождаются от полутоновых изображений (об их обработке см. следующий раздел), а оставшийся черно-белый текст сохраняется в файле с расширением black.tiff, из которого затем и создается маска;
индексированные изображения с белым или прозрачным фоном, содержащие небольшое количество цветов (по умолчанию — 4; это количество может быть изменено с помощью параметра -x (--max-colors) разбиваются на несколько бинаризованных файлов (по числу цветов), каждый из которых в дальнейшем кодируется отдельно. При этом pdfbeads использует предусмотренную форматом pdf возможность наложить на изображение две или более масок, указав для каждой из них свой цвет.
Для черно-белых текстовых страниц рекомендуется использовать формат 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) либо сформировать его путем разделения смешанного файла.
При обработке смешанных файлов картинки прежде всего отделяются от текста, для чего все черные пиксели окрашиваются белым цветом. Полученное изображение сохраняется на диск с учетом следующих параметров командной строки:
Формат сжатия данных. Допускаются значения `JPEG2000' (с синонимами `JP2' или `JPX'), `JPEG' (с синонимом `JPG'), а также `LOSSLESS' (синонимы — `DEFLATE', `PNG'). Если используемая сборка библиотеки ImageMagick поддерживает формат JPEG2000, по умолчанию используется именно он; в противном случае — JPEG. Если выбрано значение LOSSLESS, то pdfbeads будет использовать для сжатия изображений технологию deflate. Следует иметь в виду, что это может привести к значительному возрастанию объема данных по сравнению с форматами JPEG2000 или JPEG.
Разрешение для фонового слоя. Разумные значения обычно лежат в пределах 150–300 dpi (по умолчанию — 300).
Заставляет pdfbeads принудительно конвертировать цветные картинки в оттенки серого. Данный ключ может быть полезен в том случае, если исходные сканы были выполнены в цвете, но фактически содержали только черно-белые картинки, причем преобразование в оттенки серого не было выполнено на этапе первичной сканобработки. Такая ситуация часто возникает, в частности, при обработке цифровых фотографий с помощью программы ScanTailor.
Если pdfbeads загружает готовое фоновое изображение с диска, то какая-либо дополнительная обработка уже не производится. Картинки JPEG и JPEG2000 вставляются в PDF-файл без изменений, а изображения, считанные из файлов TIFF и PNG, сжимаются по технологии deflate. Однако при наличии нескольких одноименных файлов, различающихся лишь расширением, предпочтение того или иного графического формата определяется значением параметра --bg-compression.
Разделение отсканированного изображения на слои связано с особыми сложностями в тех случаях, когда текст напечатан поверх рисунка или текстуры. Для того, чтобы упаковать такую страницу в pdf с помощью pdfbeads, необходимо подготовить два графических файла:
бинаризованное или малоцветное индексированное изображение, содержащее только текст или другие элементы, которые должны быть вынесены на передний план;
полноцветный скан той же страницы (pdfbeads распознаёт такие изображения по суффиксу *.color.* в их имени).
Первый из двух файлов будет использован в качестве шаблона: руководствуясь его начертаниями, 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). Аргумент этого параметра обязательно заключается в кавычки и может состоять из одной или нескольких спецификаций диапазонов нумерации, отделенных друг от друга символом точки с запятой.
Диапазон нумерации формируется из следующих компонентов (каждый из них может быть опущен):
Порядковый номер первой страницы диапазона в PDF-файле, отделенный двоеточием от остальной части спецификации. Внимание: страницы PDF-документа нумеруются, начиная с нуля, так что для первого диапазона это значение всегда должно быть равным нулю.
Произвольный префикс нумерации (допускаются любые символы, кроме двойной кавычки, двоеточия, точки с запятой и знака процента).
Описание формата нумерации, начинающееся со знака процента, за которым следует латинская буква, указывающая на ее стиль:
арабские цифры;
заглавные римские цифры;
строчные римские цифры;
заглавные латинские буквы;
строчные латинские буквы.
Между знаком процента и идентификатором формата нумерации может стоять произвольное число, обозначающее отображаемый номер начальной страницы (по умолчанию — 1).
Предположим, например, что книга начинается с двух ненумерованных титульных страниц, после чего следуют 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.