阿帕奇 FOP |自定义字体 |相对 URL 不工作
Apache FOP | custom fonts | relative URL not working
我有配置文件来加载 Apache FOP 的自定义字体。我正在努力在服务器上配置 embed-url 以便字体 url 根据服务器域更改。
我试过嵌入-url 属性 值为:
非工作嵌入-urls:
- 嵌入-url="context:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
- 嵌入-url="file:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
工作嵌入-url:
- 嵌入-url="http://localhost:4503/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
不知何故,我似乎无法在这里找到正确的语法。我在 AEM 6.0 中使用 FOP。
<?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>
"Starting point" 相对路径:
- 如果配置文件有一个
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
以/
开头就是绝对路径,否则就是相对路径,指的是之前定义的"starting point"
如果需要,相对路径可以包含 ../
以在文件夹层次结构中返回
<!-- 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 开发人员,虽然现在不是很活跃)
对于 FOP-2.1,"Allow relative paths to font files/directories" 在 https://issues.apache.org/jira/browse/FOP-2627 有一个补丁。
我通过在代码中添加应用程序的完整路径解决了这个问题。并在配置文件中添加了稍后的 patr。
fopFactory.setBaseURL(this.getServletContext().getInitParameter("my_path"));
在配置中
embed-url="fonts/newfont.ttf"
我有配置文件来加载 Apache FOP 的自定义字体。我正在努力在服务器上配置 embed-url 以便字体 url 根据服务器域更改。
我试过嵌入-url 属性 值为:
非工作嵌入-urls:
- 嵌入-url="context:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
- 嵌入-url="file:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
工作嵌入-url:
- 嵌入-url="http://localhost:4503/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
不知何故,我似乎无法在这里找到正确的语法。我在 AEM 6.0 中使用 FOP。
<?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>
"Starting point" 相对路径:
- 如果配置文件有一个
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
以/
开头就是绝对路径,否则就是相对路径,指的是之前定义的"starting point" 如果需要,相对路径可以包含
../
以在文件夹层次结构中返回<!-- 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 开发人员,虽然现在不是很活跃)
对于 FOP-2.1,"Allow relative paths to font files/directories" 在 https://issues.apache.org/jira/browse/FOP-2627 有一个补丁。
我通过在代码中添加应用程序的完整路径解决了这个问题。并在配置文件中添加了稍后的 patr。
fopFactory.setBaseURL(this.getServletContext().getInitParameter("my_path"));
在配置中
embed-url="fonts/newfont.ttf"