如何在Apache FOP中设置全局字体?

8
这是我之前使用过的内容:
 <fo:block font-family="Tahoma">Text</fo:block>

我该如何指定整个文档使用 "Tahoma" 字体族?
我正在寻找 CSS 中的等价方法。
body {
  font-family: "Tahoma";
}
4个回答

18
如果你想为整个文档设置默认字体,可以在 fo:root 中进行设置。这样每个未指定字体的子节点都会继承该字体。
<fo:root font-family="Tahoma">
    <!-- rest of document -->
</fo:root>

1
fo:root元素没有font-family属性。请参阅规范(http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_root)。 - celbos
3
虽然可能不在规格中,但我可以确认它在Apache FOP中对我有效。 - Ryan
1
@Ryan 对我来说,使用 FOP 2.4 不起作用。 - Monkey Supersonic
在我的环境下,使用 FOP 2.7 没有问题。 - user871611

4
您可以使用节点 fo:wrapper 来将属性传递给其内容子元素。
<fo:page-sequence master-reference="A4-portrait">
    <fo:flow flow-name="xsl-region-body">
        <fo:wrapper font-size="10pt" font-family="Tahoma">
            <fo:block>
                Text <xsl:value-of select="name"/>
            </fo:block>
            <fo:block>
                Another text
            </fo:block>
        </fo:wrapper>
    </fo:flow>   
</fo:page-sequence>

0

如果您没有实际要匹配特定字体的元素,则无法像CSS中那样完成此操作。如果您只想为所有内容设置字体,但有一些例外情况,则在<fo:root>上设置它,然后在需要更改时进行更改即可。

无论字体是默认字体还是通过配置文件定义的,都没有区别。

编辑:

相当于

body {   font-family: "Tahoma"; }

会是

<xsl:template match="body">
    <fo:block font-family="Tahoma">
        Content
    </fo:block>
</xsl:template>

我假设 Content 是指正文,也就是说我需要把整个文件放在那里? - Luce Ian

0
  <fonts>
    <referenced-fonts>
      <match font-family="Tahoma"/>
    </referenced-fonts>
  </fonts>

或者

<fo:page-sequence master-reference="A4-portrait">
  <fo:flow flow-name="xsl-region-body">
    <fo:block font-size="10pt" font-family="Tahoma">
      Text <xsl:value-of select="name"/>
    </fo:block>
  </fo:flow>   
</fo:page-sequence>

第一种方法似乎不起作用,第二种方法与我在问题中写的有什么不同吗?(本地字体族)? - Luce Ian
这里是Apache FOP 的官方文档链接,我在我的项目配置中使用了它。它的效果非常好。 - stanlyF
请注意,我正在嵌入字体。 - Luce Ian
第一个代码片段没有设置默认字体;而你认为第二个代码片段是做什么的? - Luce Ian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接