使用XSL-FO创建更改栏

时间:2017-10-30 18:20:03

标签: xml xslt xsl-fo

我有一份文件,我需要使用修订栏跟踪更改(边距中的黑条表示发生了更改)。

更改后的文字是使用<span class="changeText">完成的。

示例代码,如下:

<p>This is the original text. This is the original text. This is the original text. This
is the original text. This is the original text. <span class="changeText">This text has
changed. This text has changed. This text has changed.</span> This is the original text.
</p>

enter image description here

使用

我可以合理地接近
fo:block background-color="lightyellow" border-end-color="black"
border-start-style="solid" border-start-width="4pt" padding-start="25pt"

当然,这将该部分视为一个块。我需要让它在内联工作......但是还没有找到正确的代码来提供这种类型的行为,文本流是内联的。

任何想法,我们的意见将得到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:1)

可以使用XSL-FO中的fo:change-barfo:change-bar-end来实现修订栏。

6.13.2 fo:change-bar-begin

https://www.w3.org/TR/xsl11/#fo_change-bar-begin

6.13.3 fo:change-bar-end

https://www.w3.org/TR/xsl11/#fo_change-bar-end

因此需要立即从fo:change-bar-begin元素生成fo:inlinefo:change-bar-end<span class="changeText">,如下面的模板:

<xsl:template match="span[string(@class) eq 'changeText']">
    <xsl:variable name="id" as="xs:string" select="generate-id(.)"/>
    <fo:change-bar-begin change-bar-class="{$id}" change-bar-color="black" change-bar-style="solid"/>
    <fo:inline background-color="yellow">
        <xsl:apply-templates/>
    </fo:inline>
    <fo:change-bar-end change-bar-class="{$id}"/>
</xsl:template>

样本结果:

enter image description here

这是由AH Formatter生成的。不幸的是,FOP目前尚未实施fo:change-bar-beginfo:change-bar-end