LINUX.ORG.RU

Как настроить русские шрифты в Apache FOP ?

 


0

1

Я хочу чтобы у меня были русские символы. Нашел сообщение пользователя L29Ah, в котором он предлагает установить пакет media-fonts/arialuni.

При просмотре текста билда нашел строчку:
LICENSE=«MSttfEULA» # I think we break it...

Как Вы считаете, на какой срок должен сесть в тюрьму этот вор (и, возможно, убийца)?

Какие пакеты надо установить, чтобы русские символы отображались? Или не приделать ли к пакету dev-java/fop переменную вроде L10N=«en ru»

Кстати, зарелизился FOP 2.5, а гента не готова (BGO:727504).

Прям сейчас у меня выдаются ошибки:

июн 08, 2020 7:27:16 AM org.apache.fop.apps.FOUserAgent processEvent
WARNING: Glyph "А" (0x410, Acyrillic) not available in font "Helvetica-Bold".

★★☆

Последнее исправление: Einstok_Fair (всего исправлений: 6)

При сборке PDF/A выдаётся сообщение

«For PDF/A-1b, all fonts, even the base 14 fonts, have to be embedded! Offending font: /Helvetica»

На эту тему есть пара ссылок из гугла:
https://stackoverflow.com/questions/45435698/fo-to-pdf-a-conversion-with-apache-fop-java-library
http://apache-fop.1065347.n5.nabble.com/To-PDF-a-Conversion-without-licensed-fonts-java-td45365.html

Мне непонятно, почему на stackoverflow пишут что «FOP defaults to using Helvetica when no font-family is set», в то время как в документации написано, что в этом случае используется Times.

When FOP does not have a specific font at its disposal (because it's not installed in the operating system or set up in FOP's configuration), the font is replaced with «any». «any» is internally mapped to the Base-14 font «Times» (see above).

http://apache-fop.1065347.n5.nabble.com/Font-substitution-td11238.html

Are you sure you have specified the font family for the entire document? If you forget to specify the font-family then it defaults to «sans-serif,Symbol,ZapfDingbats» By default sans-serif maps to Helvetica, so that may be how it ends being used in your case.

А как указать шрифт всего документа?

Теперь дальше, почему нет шрифта Гельветика? Потому что он проприетарный. В википедии есть по этому поводу специальный раздел: Helvetica -> Nimbus Sans L

Есть ли такой? Да:
$ fc-list | grep "Nimbus Sans L" | sort
/usr/share/fonts/urw-fonts/n019003l.pfb: Nimbus Sans L:style=Regular
/usr/share/fonts/urw-fonts/n019004l.pfb: Nimbus Sans L:style=Bold
/usr/share/fonts/urw-fonts/n019023l.pfb: Nimbus Sans L:style=Regular Italic
/usr/share/fonts/urw-fonts/n019024l.pfb: Nimbus Sans L:style=Bold Italic
/usr/share/fonts/urw-fonts/n019043l.pfb: Nimbus Sans L:style=Regular Condensed
/usr/share/fonts/urw-fonts/n019044l.pfb: Nimbus Sans L:style=Bold Condensed
/usr/share/fonts/urw-fonts/n019063l.pfb: Nimbus Sans L:style=Regular Condensed Italic
/usr/share/fonts/urw-fonts/n019064l.pfb: Nimbus Sans L:style=Bold Condensed Italic
Откуда он взялся в системе?
$ qfile /usr/share/fonts/urw-fonts/n019003l.pfb
media-fonts/urw-fonts: /usr/share/fonts/urw-fonts/n019003l.pfb
Но непонятно, как сделать так, чтобы он использовался в FOP вместо гельветики.

У fop есть разные параметры командной строки, и если я запускаю его таким образом:

#!/bin/bash

FONT="Nimbus Sans L" 

/usr/bin/fop \
    -xml mybook.xml \
    -xsl /usr/share/sgml/docbook/xsl-stylesheets/fo/docbook.xsl \
 -param body.font.family "${FONT}" \
 -param title.font.family "${FONT}" \
 -param monospace.font.family "${FONT}" \
 -param symbol.font.family "${FONT}" \
 -pdfa1b mybook.pdf
то выдаётся уже другое сообщение:
WARNING: Font «Nimbus Sans L,normal,400» not found. Substituting with «any,normal,400».

Einstok_Fair ★★☆
() автор топика
Последнее исправление: Einstok_Fair (всего исправлений: 3)

Если теперь в параметры командной строки fop дописать

 -c fonts.xml

а в самом конфигурационном файле

<fop version="1.0">
    <renderers>
        <renderer mime="application/pdf">
            <fonts>
                <auto-detect/>
            </fonts>
        </renderer>
    </renderers>
</fop>

То происходит следующее:
1) при первом прогоне создаётся кеш-файл по пути ~/.fop/fop-fonts.cache
2) .pdf-файл собирается, и с русскими буквами! (но непонятно, почему)

Хотелось бы понять, куда надо по-умолчанию класть этот конфигурационный файл (в .ebuild-файле), чтобы fop искал его без указания в параметрах командной строки.

Документация предлагает использовать ключ -d чтобы выяснить, где происходит поиск:

Run FOP in debug mode (command line option -d). This makes FOP report which configuration information it finds.

Я попробовал добавить ключ -d, но никаких сообщений о считывании или поиске конфигурационного файла не появилось (и без указания ключа -c дополнительно к ключу -d и с указанием ключа -c fonts.xml).

Einstok_Fair ★★☆
() автор топика
Последнее исправление: Einstok_Fair (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.