Трансформация FictionBook2 — DocBook — XSL-FO — PDF

KiR


Содержание

Преобразование FictionBook2 — DocBook
Описание XSL-трансформации
Сопоставление FictionBook2 и DocBook
Скрипт преобразования FictionBook2 — DocBook — XSL-FO — PDF
Описание
Использование
Конфигурационный файл
Шаблоны
Необходимые программные пакеты и библиотеки
Замечания по генерации PDF
Download
Бинарный пакет для Win32
Исходный код
Ссылки
Changes

Преобразование FictionBook2 — DocBook

Описание XSL-трансформации

Преобразование FictionBook2 — DocBook написано на XSLT v1.0 с расширениями: элементом xsl:document и функцией document(). Данный XSLT-сценарий выполняет следующие действия:

  • Переводит FictionBook 2 в DocBook
  • Для полей без соответствия в DocBook из fb:description пишет соответствующие приложения в конце документа (опционально, см. Таблица 1, «Шаблонные параметры трансформации FictionBook2 — DocBook»);
  • Создает индексный файл, в котором находятся:

    • список файлов с их mime-типом;
    • метаинформация о документе (авторы, название);
    • размеры и разрешение (в dpi) вывода.

  • Выводит все вложения в .fb2 (тег binary) в отдельные файлы

Об интернационализации. В fb2docbook/l10n находятся файлы для поддержки языков (сейчас русский и английский). Если файл под какой-то язык отсутствует, то выбирается язык по умолчанию (см. Таблица 1, «Шаблонные параметры трансформации FictionBook2 — DocBook»).

Входные параметры для xslt-трансформации. 

  1. conv_info_idx — индексный файл. См. tranformation output index.
  2. document-element — название элемента типа xsl:document. Зависит от используемого процессора.

Шаблонные параметры трансформации. Находятся в шаблонах параметров, используемых для конвертации DocBook — XSL-FO, см. Таблица 5, «Шаблоны основных страниц». Одинаковы для всех шаблонов (кроме начинающихся с output.), см. включаемый файл params/p_fb2_common-default.xsl.

[Внимание] Внимание

Обязательно прочитайте про параметры output.*, page.width и page.height. В скрипте btransformer.py пока обрабатываются только такие варианты записи.

Таблица 1. Шаблонные параметры трансформации FictionBook2 — DocBook

Название параметра Описание
fb2.book-parts Указывает, как вложенные fb:section должны заменятся на соответствующие структурные элементы DocBook (например, на первом (верхнем) уровне -- это part, а идущие на том же уровне fb:epigraph и fb:image идут в partintro).
fb2.image.align Горизонтальное расположение изображения (в FB2 такое указание для рисунков отсутствует).
fb2.image.valign Вертикальное расположение изображения (в FB2 такое указание для рисунков отсутствует).
fb2.default.language Язык по умолчанию, если он не указан в FB2-документе или отсутствует его интернационализационная поддержка.
fb2.print.infos Булев параметр, выводить или нет информацию в виде приложений о FB2-документе.


Таблица 2. Шаблонные параметры трансформации FictionBook2 — DocBook, только записываемые в индексный файл

Название параметра Описание
output.images_mode.resize Булев параметр. Определяет, преобразовывать ли изображения. Возможные варианты записи: 1, 0, True, true, False, false.

Если истинен, обязательно определять все нижеследующие параметры!

output.dpi.width Количество точек на дюйм по горизонтали.

Записывается просто числом в строке!

output.dpi.height Количество точек на дюйм по вертикали.

Записывается просто числом в строке!

output.max_image_margin.width Если умножить на 2 и полученное число вычесть из ширины страницы в пикселях, то получим максимальный горизонтальный размер изображения.

В пикселях! Записывается просто числом в строке!

output.max_image_margin.height Если умножить на 2 и полученное число вычесть из высоты страницы в пикселях, то получим максимальный вертикальный размер изображения.

В пикселях! Записывается просто числом в строке!


Таблица 3. Шаблонные параметры трансформации FictionBook2 — DocBook, только записываемые в индексный файл, и общие с параметрами для DocBook

Название параметра Описание
page.width Ширина страницы.

В миллиметрах. Записывается как действительное число (разделитель — точка), далее без пробела 'mm'. Например, '88.184mm'

page.height Высота страницы.

В миллиметрах. Записывается как действительное число (разделитель — точка), далее без пробела 'mm'. Например, '113.854mm'


Сопоставление FictionBook2 и DocBook

TODO

Скрипт преобразования FictionBook2 — DocBook — XSL-FO — PDF

Описание

Скрипт написан на Python. Служит "обвязкой" для xsl-трансформаций и преобразований с помощью других инструментов, скрывая детали низкоуровневой реализации. Переводит вложенные в .fb2 файлы обратно в бинарный вид и выполняет трансформацию изображений (изменение размера и цветности).

Использование

[Замечание] Замечание

Входной .fb2-файл может быть сжат:

  • gzip (расширение .gz)
  • bzip2 (расширение .bz2)
  • zip (расширение .zip), в данном случае обработается файл в архиве с именем, совпадающим с названием архива, но без суффикса '.zip'

Usage: btransformer.py --config config_file [options]
          fb2_file[.(zip|gz|bz2)] pdf_file          
          Options:
          --version             show program's version number and exit
          -h, --help            show this help message and exit
          -c FILE, --config=FILE
          read config from FILE
          --wh                  turn on win32hack -- needed for using on win32
          without tools installation
          --no-remove_tmp       do not remove working temporal files
          --no-update_metadata  do not update metadata
          --no-linearize_pdf    do not linearize pdf
          --xslt_proc=XSLT_PROC
          set xslt_proc to use
          --fo_proc=FO_PROC     set fo_proc to use
          --pdf_proc=PDF_PROC   set pdf_proc to use
          --pdf_optimizer=PDF_OPTIMIZER
          set pdf_optimizer to use
          --xslt_params=FILE    set xslt_params file to use
          --xslt_titlepages=FILE
          set xslt_titlepages file to use

Конфигурационный файл

TODO

Шаблоны

В пакеты входят шаблоны, приспособленные для вывода pdf из формата FB2 и для устройства Sony Reader. Находятся в директории params дистрибутива.

Таблица 4. Шаблоны для заглавных страниц

Название файла шаблона Формат или устройство Примечание
titlepage.templates_prs-default.xml Sony Reader PRS-500 Уменьшены размеры шрифтов заглавий
titlepage.templates_a4-default.xml Бумага, размер A4 Изменений не вносилось (копия из дистрибутива Docbook XSL Stylesheets)
titlepage.templates_a5-default.xml Бумага, размер A5

Для распечатки по две страницы на A4

Изменений не вносилось (копия из дистрибутива Docbook XSL Stylesheets)


Таблица 5. Шаблоны основных страниц[1]

Название файла шаблона Формат или устройство Шрифты Примечание
params_prs-font.liberation.xsl Sony Reader PRS-500 Шрифты Liberation  
params_prs-font.vista.xsl Sony Reader PRS-500

Шрифты из Vista

основной — Cambria
без засечек — Candara
моноширинный — Consolas
 
params_a4-font.liberation.xsl Бумага, размер A4 Шрифты Liberation  
params_a4-font.vista.xsl Бумага, размер A4

Шрифты из Vista

основной — Cambria
без засечек — Candara
моноширинный — Consolas
 
params_a5-font.liberation.xsl Бумага, размер A5 Шрифты Liberation Для распечатки по две страницы на A4
params_a5-font.vista.xsl Бумага, размер A5

Шрифты из Vista

основной — Cambria
без засечек — Candara
моноширинный — Consolas
Для распечатки по две страницы на A4


Необходимые программные пакеты и библиотеки

Замечания по генерации PDF

Генерация в FOPFOP пишет в .pdf только содержание (bookmarks), другую метаинформацию (автор, название) приходится дописывать с помощью pdftk. К сожалению в таком случае Acrobat Pro/Acrobat Reader (по-крайне мере версии 8) показывает только поле Title (название), при этом вьюер в Sony Reader показывает все поля. Не поддерживает вывод линеаризированного PDF.

Генерация в XEPXEP имеет расширение к XSL-FO, которое позволяет дописывать всю метаинформацию, и в .pdf, полученных с использованием этого процессора, в Adobe Acrobat виден весь description (описание). Поддерживает линеаризацию при выводе .pdf-файла (опция конфигурации LINEARIZE, отключена по умолчанию).

Линеаризация.  Для комфортного просмотра pdf-документов при медленном доступе к файлу или при малом количестве оперативной памяти, необходимо проводить линеаризацию документа (так называемый 'fast web view' в Acrobat). Для этого можно использовать либо Adobe Acrobat (File - Save as (Adobe pdf files, optimized, *.pdf) и выставить соответствующую опцию в Settings), либо скрипт pdfopt из пакета Ghostscript . Но если использовать pdfopt, то просмотрщик в PRS-500 не показывает страницы после оглавления вообще, они просто пусты (сложно сказать где и у кого в данном случае ошибка или недоработка). В случае же оптимизации в Acrobat'е, полученные документы быстро отображаются и листаются на Sony Reader на любой и с любой страницы. Начиная с версии 0.1.bzr252 в fb2docbook включена поддержка оптимизатора pdfopt, а также в шаблоне params/params_prs-default.xsl отключена генерация оглавления (в метаинформации TOC остается!). Это позволяет сразу получать файлы, пригодные к комфортному чтению на устройствах Sony Reader.

Download

Бинарный пакет для Win32

Download. 

Требования текущей версии. Установленная JVM.

Установка и запуск. Распаковать в директорию по выбору. Для запуска использовать скрипт btransformer.cmd.

[Внимание] Внимание

Из-за относительных путей в конфигурации, текущая директория при запуске скрипта должна быть той, куда распакован пакет (т.е. запускать его из этой директории).

Состав пакета текущей версии. 

Исходный код

Download. 

Ссылки

Changes

v0.1.bzr252. 

  • Добавлена поддержка оптимизатора (линеаризатора) pdfopt из пакета Ghostscript.
  • Тег fb:subtitle заменяется теперь на docbook:bridgeahead.
  • Другие несущественные изменения в XSLT-сценарии.
  • Обновлены инструменты в пакете под Win32.
  • Обновлены шаблоны трансформации Docbook.
  • И другое.



[1] Во всех шаблонах параметры для преобразования FictionBook2 — DocBook одинаковы.

[2] Не поддерживает вывод вложенных файлов, т.к. xalan:write всегда выводит в выходном файле xml-заголовок.

[3] Оба процессора написаны на Java и требуют установленной JVM

[4] Метрики для FOP'а в архиве отсутствуют, так как начиная с версии 0.94 больше не требуются.