在 XSL-FO 中使用外部 CSS

Posted

技术标签:

【中文标题】在 XSL-FO 中使用外部 CSS【英文标题】:Using external CSS in XSL-FO 【发布时间】:2013-07-03 22:14:43 【问题描述】:

我正在使用 XSL 文档来创建 PDF。有一些样式被定义为内联。我想将它们移动到外部 CSS 文件中,但我遇到了死胡同。

这是我的代码:

<fo:table border-bottom="solid 2pt #409C94" border-top="solid 2pt #409C94" margin-bottom=".1in" background-color="#E9E9E9" text-align="center"  table-layout="fixed"  font-size="9pt">
    <fo:table-column column-/>
    <fo:table-body  table-layout="fixed">
        <fo:table-row>
            <fo:table-cell text-align="center" padding-top=".5mm" padding-bottom=".5mm">
                <fo:block>Some text is placed here.</fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>

我想要从这个文档中删除所有样式标签,即:

border-bottom="solid 2pt #409C94"
border-top="solid 2pt #409C94"
margin-bottom=".1in"
background-color="#E9E9E9"
text-align="center"
table-layout="fixed"
 font-size="9pt"

我正在考虑将它们移动到 CSS 文件中,但欢迎任何更好的方法。

谢谢。

【问题讨论】:

【参考方案1】:

在 Danial Haley 提供的宝贵建议下,我做了一些研究并找到了解决方案。以下供大家参考。

带有样式的文件(例如 Styles.xsl)

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:attribute-set name="CustomStyles">
    <xsl:attribute name="background-color">#BB5588</xsl:attribute>
    <xsl:attribute name="border-bottom">solid 2pt #409C94</xsl:attribute>
    <xsl:attribute name="border-top">solid 2pt #409C94</xsl:attribute>
    <xsl:attribute name="font-size">9pt</xsl:attribute>
</xsl:attribute-set>

我要导入样式的主文件(例如 Main.xsl)

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:import href="Styles.xsl"/>

<fo:table xsl:use-attribute-sets="CustomStyles" margin-bottom=".1in" text-align="center" table-layout="fixed" >
    <fo:table-column column-/>
    <fo:table-body  table-layout="fixed">
        <fo:table-row>
            <fo:table-cell text-align="center" padding-top=".5mm" padding-bottom=".5mm">
                <fo:block>Some text is placed here.</fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>

您可以在 Main.xsl 中看到,我有一个导入的(也可以使用 xsl:include)“样式表”Styles.xsl。在标签fo:table 中,我添加了xsl:use-attribute-sets,它在VS2010 中为Styles.xsl 中定义的所有xsl:attribute-set 提供了智能感知。

【讨论】:

【参考方案2】:

我不确定如何将它们从文档中完全删除,但您可以使用xsl:attribute-set 将它们从fo:table 中移出。

您可以将它们放在单独的 xsl 文件中,然后使用 xsl:include/xsl:importxsl:call-template 的组合(您的 xsl:attribute-set 可以放在命名模板中)。

  <xsl:attribute-set name="table">
    <xsl:attribute name="border-bottom">solid 2pt #409C94</xsl:attribute>
    <xsl:attribute name="border-top">solid 2pt #409C94</xsl:attribute>
    <xsl:attribute name="margin-bottom">.1in</xsl:attribute>
    <!-- etc... -->
  </xsl:attribute-set>

要使用它们,请将属性xsl:use-attribute-sets="table" 添加到fo:table

【讨论】:

谢谢丹尼尔。您的解决方案给了我应该去的方向,并在此基础上搜索了一些示例。我将在回复此线程时提出解决方案。

以上是关于在 XSL-FO 中使用外部 CSS的主要内容,如果未能解决你的问题,请参考以下文章

FOP XSL-FO 锚定在外部目的地

XSL-FO 中是不是有“类似”的 CSS?

如何在wordpress中链接外部css? [关闭]

使用外部 css 和引导框架类做出反应

为啥在html中调用外部css样式表没有效果

如何将带有嵌入图像的 XHTML+CSS 转换为 XSL-FO?