© 2001-2003
Алексей Алишевских
alexeya at gmail-dot-com

Last Modified:
01/24/2006 14:00:35

Russian FOP FAQ

В связи с тем, что на официальном сайте FOP сейчас появился раздел FAQ (xml.apache.org/fop/faq.html), я убрал отсюда некоторые общие вопросы (типа проблем с памятью), оставив только специфически "русские" вопросы. Главным образом, -- касающиеся использования FOP с русским языком и кириллицей (вопросы "кто виноват?" и "что делать?" остаются открытыми).

  1. Существуют ли еще какие-либо FAQ по данной теме?
  2. Какими технологиями необходимо владеть, чтобы пользоваться FOP? Где я могу обучиться этим технологиям?
  3. Какие версии FOP я могу использовать для работы с русским языком?
  4. Что такое Russian FOP 0.17?
  5. Какие кириллические шрифты могут использоваться с FOP и где их можно взять?
  6. Как определить, подходит ли мой шрифт для FOP?
  7. Терпеть не могу truetype! Могу ли я использовать Postscript-шрифты (Type1)?
  8. Я пытаюсь получить PDF c русским текстом, но вижу только решетки (#) на месте русских букв
  9. Я не могу сделать copy-and-paste русского текста из PDF / Я не могу отредактировать PDF с русским текстом в Adobe Acrobat
  10. В какой кодировке должны быть входные FO-файлы?
  11. Русские переносы не работают
  12. Как сделать, чтобы мой шрифт был шрифтом FOP по умолчанию?
  13. Программа просмотра PDF сообщает об ошибке / PDF отображается коряво (отсутствуют русские буквы и т.д.)
  14. Я не могу использовать FOP для генерации Postscript'a с кириллическим текстом.

1.Существуют ли еще какие-либо FAQ по данной теме?

Раздел FAQ на официальном сайте проекта: http://xml.apache.org/fop/faq.html

FAQ-архив FOP лежит на http://www.owal.co.uk:8090

В разделе "XML FAQ" сервера xmlhack.ru, кроме всего прочего, есть русские FAQ по FOP.

2.Какими технологиями необходимо владеть, чтобы пользоваться FOP? Где я могу обучиться этим технологиям?

Во первых, необходимо владеть языком XSL Formatting Objects (XSL-FO):

К сожалению, русскоязычные обучающие ресурсы по XSL-FO мне неизвестны :-(

Кроме того, понадобится владение языком XSL Transformations (XSLT), включая выражения языка XPath для преобразования исходного XML в XSL-FO:

Полезно освоить язык SVG (Scalable Vector Graphics), при помощи которого можно создавать иллюстрации для FOP:

3.Какие версии FOP я могу использовать для работы с русским языком?

Все версии, начиная с 0.19 и выше удовлетворительно работают с кириллицей, используя Unicode. Также существует русифицированный вариант более ранней версии 0.17 (Russian FOP 0.17) -- см. ниже.

4.Что такое Russian FOP 0.17?

Это локальный вариант ранней версии 0.17, патченый для работы с русским языком (начало 2001 г.). Отличается от современных версий меньшими возможностями и большей глюкавостью. Из положительных качеств можно отметить поддержку 8-битных (не-Unicode) кириллических шрифтов, в том числе, Postscript Type1, а также старого стандарта PDF 1.2 (AcroRead < 4.0), если это кому-нибудь нужно.

См. описание процедуры патчинга.

5.Какие кириллические шрифты могут использоваться с FOP и где их можно взять?

Для работы с FOP версий 0.19 и выше потребуются шрифты, содержащие кириллицу в кодировке Unicode. Таковыми, например, являются все truetype-шрифты от Microsoft и Monotype, входящие в стандартную поставку MS Windows. Эти шрифты распространяются бесплатно и их можно скачать отсюда. Шрифты пригодны независимо от платформы и не требуют инсталляции в системе для работы с FOP.

Список шрифтов с метриками, протестированных с FOP можно найти здесь.

Russian FOP 0.17 работает с 8-битными кириллическими шрифтами Type1 (pfb) и TrueType, правда несколько избирательно.

6.Как определить, подходит ли мой шрифт для FOP?

Запомните правило: В unicode-шрифтах кириллица занимает диапазон кодов 0410-044F (hex).

На Windows можно воспользоваться стандартной системной утилитой Character Map. Запустите эту программу и выберите для просмотра нужный шрифт. Затем найдите в таблице символов кириллические буквы и щелкните по букве "А". Если в строке статуса появится информация "U+0410: Cyrillic Capital Letter A". то это Unicode-шрифт, пригодный для работы с кириллицей в FOP. В противном случае (например, строка статуса будет содержать "U+00C0: Latin Capital Letter A With Grave") -- это 8-битный шрифт, который вы сможете использовать только для латинских букв.

Можно пользоваться и любыми другими шрифтовыми утилитами, позволяющими просмотреть коды символов.

7.Терпеть не могу truetype! Могу ли я использовать Postscript-шрифты (Type1)?

В версии 0.19 и выше для этого потребуются Unicode Type1-шрифты, содержащие кириллицу. К сожалению, о существовании таковых мне не известно. Попробуйте Russian FOP 0.17 - его можно скомпилировать с обычными 8-битными PFB-шрифтами.

8.Я пытаюсь получить PDF c русским текстом, но вижу только решетки (#) на месте русских букв

RTFM. Вероятно, используемые шрифты не включены в конфигурацию FOP. Внимательно прочитайте раздел Fonts в документации к FOP или FOP Configuration HOWTO на этом сайте. Также убедитесь, что шрифт содержит кириллицу в Unicode (см. Как определить, подходит ли мой шрифт для FOP?).

9.Я не могу сделать copy-and-paste русского текста из PDF / Я не могу отредактировать PDF с русским текстом в Adobe Acrobat

К сожалению если используется FOP версий 0.19 и выше, так и должно быть. Дело в том, что при генерации PDF 1.3 с внедрением шрифтов внедряются глифы только тех символов, которые реально используются в документе. Это существенно уменьшает вес документа по сравнению с внедрением шрифтовых файлов целиком. При этом происходит необратимое преобразование нормальных кодов символов в индексы глифов внедренного подмножества (CID's). Следовательно, текст, набранный CID-шрифтом недоступен для редактирования, а для всех приложений (кроме Acrobat Reader) - является непонятным мусором. Это стандартный механизм PDF, а не ограничение FOP.

10.В какой кодировке должны быть входные FO- и XML-файлы?

Файлы, содержащие символы не входящие в ISO-8859-1 (в т.ч. кириллицу) должны быть в кодировке UTF-8. Это совершенно правильный и рекомендуемый подход для любого XML.

Однако, существуют способы, позволяющие использовать другие кодировки (например, русские 8-битные). Это требует правки исходного кода и перекомпиляции Xerces (xml-парсера, используемого FOP). Техника этой процедуры описана здесь.

11.Русские переносы не работают

См. о русских переносах на этом сайте.

Если вы компилировали FOP из исходников, убедитесь, что файл ru.xml присутствовал в каталоге src/hyph в момент компиляции.

12.Как сделать, чтобы мой шрифт был шрифтом FOP по умолчанию?

По умолчанию FOP использует шрифт, которому определен алиас "sans-serif". Об определении синонимов имен шрифтов см. FOP Configuration HOWTO

13.Программа просмотра PDF сообщает об ошибке / PDF отображается коряво (отсутствуют русские буквы и т.д.)

Убедитесь что просмотрщик PDF поддерживает версию PDF 1.3 (Acrobat Reader >=4.0). Более ранние версии Acrobat и некоторые PDF-вьюэры не от Adobe (например, xpdf и базирующиеся на движке Alladin Ghostscript) не поддерживают возможности PDF 1.3 и не смогут правильно отображать PDF с CID-шрифтами.

14. Я не могу использовать FOP для генерации Postscript'a с кириллическим текстом.

Решение от Александра Сайфуранова <aleks(at)asv.ru>:

Вот что я делал:
- нашел "руками_подправленные" Type1 koi8r шрифты (*CyrMT.pfb +
  *CyrMT.pfm) и создал для них  XML-метрики;
- прописал эти шрифты в userconfig.xml;
- с помощью Xalan (или другого трансформера имхо) из xml и xsl создаю
  fo, причем все файлы с encoding="koi8r";
- дальше самое интересное :) - в fo руками правлю текст
  encoding="koi8r" на encoding="iso-8859-1";
- напускаю на это дело fop