为什么xsl-fo padding正在应用于其他块?

时间:2013-11-19 21:17:46

标签: xslt xsl-fo apache-fop

我想要理解这一点我不知所措。我是新手使用xsl-fo(apache-fop实现),我想要一个带边框的块,里面的内容被填充,所以它不会碰到边框。 但是,当我添加填充时,填充也应用于下一个块?

<fo:page-sequence master-reference="report-page">
<fo:flow flow-name="xsl-region-body">

    <fo:block border="1px solid black" font-size="8pt" margin-bottom="3mm" padding="3mm" >
        <fo:block font-weight="bold">FOO</fo:block>
        <fo:block>ANOTHER BLOCK</fo:block>
    </fo:block>

    <fo:block font-size="8pt">BAR</fo:block>
</fo:flow>

为什么BAR会被前一个块的填充量缩进?如果我删除第一个块上的填充,那么事情排好了吗?

2 个答案:

答案 0 :(得分:3)

你应该做的是将边距设置为“0mm”并在块上填充“3mm”,如果你的意图是在外面边界没有空间,并且文本和文本之间有3mm的空间。边界。

<fo:block border="1px solid black" font-size="8pt" margin="0mm" padding="3mm">
    <fo:block font-weight="bold">FOO</fo:block>
</fo:block>

如果margin-bottom旨在在元素之间留出空间,那么你可以在后面的元素上使用space-after或space-before。

答案 1 :(得分:1)

尝试执行以下操作(未经测试,因为我的Apache FOP安装无法实现......)

编辑:现已通过测试。填充仅适用于第一个块(“FOO”)。

在fo:inline元素中指定填充,如下所示:

<fo:block border="1px solid black" margin-bottom="3mm">
 <fo:inline padding="3mm" font-size="8pt" font-weight="bold"> 
  <fo:block>FOO</fo:block>
 </fo:inline>
</fo:block>

此外,我已将font-weight和font-size属性移动到内联元素,因为内部块是他们需要的唯一位置(至少在您的简单片段中)。外部块仅定义边框。如果有效,请告诉我。