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.

Другие вопросы по тегам