Я использую:
- Апач фоп 1.0
- Джава
Мне нужно обрабатывать специальные символы, юникод которых выше u0100. Целевой шрифт, который я должен использовать, — Arial. Поскольку я не могу ожидать, что Arial присутствует на целевой платформе (например, Linux), я встроил Arial.ttf в свой jar. Мой фактический файл конфигурации выглядит так:
<fop ...>
<!-- Base URL for resolving relative URLs -->
<base>./</base>
<!-- Font Base URL for resolving relative font URLs -->
<font-base>./</font-base>
<renderers>
<renderer mime="application/pdf">
<fonts>
<font kerning="yes" embed-url="arial.ttf" encoding-mode="auto">
<font-triplet name="Arial" style="normal" weight="normal"/>
<font-triplet name="ArialMT" style="normal" weight="normal"/>
</font>
<!--<directory>C:/Windows/Fonts</directory>-->
</fonts>
<auto-detect/>
</renderer>
...
</fop>
Делая это таким образом, я получаю сообщение об ошибке при загрузке моего файла конфигурации в fop:
org.apache.fop.apps.FOPException: Failed to resolve font with embed-url 'arial.ttf'
Единственный способ, которым мне удавалось заставить его работать до сих пор, - это жестко указать путь к папке в файле конфигурации:
<font kerning="yes" embed-url="C:/myapp/arial.ttf" encoding-mode="auto">
<font-triplet name="Arial" style="normal" weight="normal"/>
<font-triplet name="ArialMT" style="normal" weight="normal"/>
</font>
Но очевидно, что это не может быть решением!
Использование тега «каталог» будет работать в Windows только потому, что у вас есть Arial. Но, как упоминалось выше, он также должен работать на Linux, Mac и т. д.
Тег «автоматическое обнаружение» также не работал (даже не в Windows) и не является решением, поскольку я не могу ожидать, что на целевой платформе будет установлен Arial.
Любые предложения, чтобы решить эту проблему?