![]() © 2001-2003 |
Russian FOP FAQВ связи с тем, что на официальном сайте FOP сейчас появился раздел FAQ (xml.apache.org/fop/faq.html), я убрал отсюда некоторые общие вопросы (типа проблем с памятью), оставив только специфически "русские" вопросы. Главным образом, -- касающиеся использования FOP с русским языком и кириллицей (вопросы "кто виноват?" и "что делать?" остаются открытыми).
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 |