Apache FOP | пользовательские шрифты | относительный URL не работает
У меня есть файл конфигурации для загрузки пользовательских шрифтов для Apache FOP. Я пытаюсь настроить встроенный URL-адрес на сервере, чтобы URL-адрес шрифта менялся в зависимости от домена сервера.
Я пробовал значение свойства embed-url как:
Неработающие встроенные URL:
- встраивать-URL ="контекст:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
- встраивать-URL ="Файл:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
Рабочий код для вставки:
- встраивать-URL ="HTTP: // локальный:4503/ и т.д. / конструкции / Projectname / clientlibs / pdffonts / Batang.ttf"
Почему-то я не могу найти правильный синтаксис здесь. Я использую FOP с AEM 6.0.
<?xml version="1.0"?>
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<fonts>
<font kerning="yes"
embed-url="context:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf" -- this doesn't
embedding-mode="subset">
<font-triplet name="SimSun" style="normal" weight="normal" />
</font>
<font kerning="yes"
embed-url="file:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf" -- this doesn't
embedding-mode="subset">
<font-triplet name="Batang" style="normal" weight="normal" />
</font>
<font kerning="yes"
embed-url="http://localhost:4503/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf" -- this works
embedding-mode="subset">
<font-triplet name="Batang" style="normal" weight="normal" />
</font>
</fonts>
</renderer>
</renderers>
</fop>
2 ответа
"Начальная точка" для относительных путей:
- если файл конфигурации имеет
font-base
элемент (как прямой дочерний элемент корневого элемента документа), его значение используется для разрешения относительных путей шрифта - в противном случае значение
base
элемент используется вместо - файл конфигурации по умолчанию, включенный в дистрибутив, содержит элемент
<base>.</base>
Это означает, что относительные пути должны интерпретироваться как относящиеся к положению файла конфигурации
Обратите внимание, что значения font-base
а также base
также может быть относительным, в этом случае они ссылаются на путь файла конфигурации.
<?xml version="1.0"?>
<fop version="1.0">
<base>.</base>
<font-base>/Users/lfurini/Library/Fonts</font-base>
<!-- other possible examples:
<font-base>.</font-base>
<font-base>../fonts</font-base>
-->
<!-- ... -->
</fop>
Синтаксис относительных путей:
- тебе не нужно
context:
или жеfile:
- если
embed-url
начинается с/
это абсолютный путь, в противном случае это относительный путь, относящийся к "начальной точке", определенной ранее относительные пути могут содержать
../
чтобы вернуться в иерархию папок, если это необходимо<!-- directly in the base folder --> <font kerning="yes" embed-url="font1.ttf"> <font-triplet name="font1" style="normal" weight="normal"/> </font> <!-- in a "sister" folder --> <font kerning="yes" embed-url="../otherFonts/font2.ttf"> <font-triplet name="font2" style="normal" weight="normal"/> </font> <!-- in a sub-folder --> <font kerning="yes" embed-url="specialFonts/font3.ttf"> <font-triplet name="font3" style="normal" weight="normal"/> </font> <!-- absolute path --> <font kerning="yes" embed-url="/Users/lfurini/Library/Fonts/font4.ttf" embedding-mode="subset"> <font-triplet name="font4" style="normal" weight="normal"/> </font>
(протестировано с FOP 1.1, 2.0 и 2.1)
(раскрытие: я разработчик FOP, хотя в настоящее время я не очень активен)
Я решил это, добавив полный путь к приложению из кода. и добавил позже patr из конфигурационного файла.
fopFactory.setBaseURL (this.getServletContext () getInitParameter("my_path").);
В конфиге
встраивать-URL ="Шрифты /newfont.ttf"
Для FOP-2.1 есть патч для "Разрешить относительные пути к файлам / каталогам шрифтов" по адресу https://issues.apache.org/jira/browse/FOP-2627.