unreal_undead (unreal_undead) wrote,
unreal_undead
unreal_undead

Закат солнца вручную

Под катом - подводные камни создания читаемых на eInk'овском девайсе книг из fb2 (конкретнее - преобразования fb2 в djvu), в основном для себя, чтобы чего не забыть.


Цепочка такая fb2->docbook->jadetex->pdf->djvu.

1. Используется написанная добрым человеком xslt трансформация. Там же есть и готовый комплект для доведения результата до pdf, но мы не ищем лёгких путей - есть сомнения, что некие FOP/XEP дадут нормальное типографское качество (а экран lBook V3 уже позволяет это качество оценить), так что разбивкой текста на строки и страницы и прочим кернингом будет заниматься старый добрый TeX.
Трансформация без проблем скармливается xsltproc'у (только надо явно включить system_params.xsl - в оригинале этим занимается питоновская обвязка). Есть некие претензии к результату текущей версии - главы описываются как <part> с содержимым в <partinfo>, из-за чего в конечном результате большая часть страниц не нумеруется (ибо считается введением в соответствующую часть). Замена <part> на <chapter> с убиранием <partinfo> делает результат более логичным (надо бы пропатчить это в xsl). Включенные в fb2 картинки сами собой не выдираются - пока наплевал и просто убрал их упоманиние в выходном файле.

2. Используется openjade c dtd/dsssl для docbook. Тонкостей хватает:
  • openjade не нравятся entities, идущие с docbook dtd - надо брать отдельно (подходят те, на которые ссылается соответствующая дока с LDP) и прикручивать. К тому же имена этих entities в dsssl от Нормана Уолша отличаются от каталога в dtd отсутствием хвостика //XML - фиксится правкой каталога. Всё это делается один раз.
  • openjade не любит dtd от docbook 4.4 - правим в заголовке документа на 4.3
  • при наличие стандартной http ссылки на dtd openjade пытается лезть к ней, обламывается и игнорирует локальную версию - после удаления замечательно находит по каталогу.
  • кодировка сама собой подхватываться не хочет - прописываем UTF-8 в переменную окружения SP_ENCODING
  • в командной строчке надо перед документом упомянуть xml.dcl и сказать -Vtex-backend для включения определённые только в теховском backend'е фич.
  • большая часть интересных параметров вроде типа страницы прибита в dsssl гвоздями (константы в dbparam.dsl), так что правим их там - страница A6, шрифт 12, переносы включить, строки выравнивать, размеры полей по минимуму (собственно, специфика девайса только здесь).
3. pdfjadetex завёлся практически сразу, разве что русский язык в mlnames.sty намеренно проигнорировали - включаем, чтобы работали переносы.

4. Конверсия в djvu требуется исключительно из-за кривой поддержки pdf в текущих прошивках lbook - заметно плавают расстояния между буквами. Пока ничего лучшего any2djvu не нашёл - в бесплатном софте нет нормального сжатия многостраничных документов.

PS Не всё так просто - any2djvu отказался кушать готовый pdf (ghostscript выкидывает ошибку, хотя на моей машине он же ведёт себя адекватно); при этом результаты работы pdflatex'а он воспринимал нормально. Придётся делать промежуточную конверсию...
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 8 comments