Apache FOP |自定义字体|相对网址无效

时间:2016-02-04 08:14:42

标签: aem apache-fop

我有配置文件来加载Apache FOP的自定义字体。我正在努力在服务器上配置embed-url,以便字体url按服务器域更改。

我已尝试将embed-url属性值设为:

非工作嵌入式网址

  • 嵌入的URL ="上下文:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"
  • 嵌入的URL ="文件:/etc/designs/projectName/clientlibs/pdffonts/Batang.ttf"

使用embed-url:

  • 嵌入的URL =" HTTP://本地主机:4503的/ etc /设计/ 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>

3 个答案:

答案 0 :(得分:4)

&#34;起点&#34;对于相对路径:

  • 如果配置文件具有font-base元素(作为文档根元素的直接子元素),则其值用于解析相对字体路径
  • 否则,使用base元素的值代替
  • 分发中包含的默认配置文件具有元素<base>.</base>,这意味着必须将相对路径解释为相对于配置文件的位置

请注意,font-basebase的值也可以相对,在这种情况下,它们指的是配置文件路径。

<?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/开头,则它是绝对路径,否则它是指向&#34;起点&#34;的相对者。
  • 之前定义的
  • 如果需要,相对路径可以包含../以备份到文件夹层次结构中

    <!-- 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开发人员,但现在不是很活跃)

答案 1 :(得分:1)

我通过从代码向应用程序添加完整路径解决了它。并从配置文件中添加了以后的patr。

  

fopFactory.setBaseURL(this.getServletContext()。getInitParameter(“ my_path”));

在配置

  

embed-url =“ fonts / newfont.ttf”

答案 2 :(得分:0)

对于FOP-2.1,在https://issues.apache.org/jira/browse/FOP-2627有一个“允许字体文件/目录的相对路径”的补丁。