XSL-FO在一行或fo:leader上写文本

时间:2013-02-14 10:12:22

标签: xsl-fo apache-fop

我正在从xml和xsl-fo以及Apache FOP创建一个pdf文件,我需要在一行上写文本。 我的意思是像手工编写的形式,你写姓,姓等。 像这样的东西: Name: ______John_________
但这条线也在名下。 我试图用一个fo:领导者。 所有都在一个表格单元格中。 使用此代码

 <fo:table-cell column-number="3" font-size="10pt" number-columns-spanned="4">
   <fo:block space-before="2mm" wrap-option="no-wrap" overflow="visible" margin-top="2mm" margin-left="3mm">
     <xsl:value-of select="$element/value"/>
   </fo:block>
   <fo:block wrap-option="no-wrap" overflow="visible" margin-left="2mm" margin-top="0mm">
     <fo:leader leader-length="130mm"
                leader-pattern="rule"
                rule-style="solid"
                rule-thickness="0.1mm"
                color="black"></fo:leader>
   </fo:block>
 </fo:table-cell>

我得到了一条直线,但它并没有立即在这个词之下,如果我为领导者块设置了 margin-top =“ - 3mm”,那就不会改变。 我怎样才能得到这样的结果?还有其他方法吗?

非常感谢

2 个答案:

答案 0 :(得分:4)

我用另一种方式得到了结果:fo:block border-bottom="solid" border-bottom-width="0.2mm"做了伎俩。需要<fo:leader />中的</fo:block>才能使下划线值(本例中为John)为空。

<fo:table-row>
    <fo:table-cell font-size="10pt">
        <fo:block>
            <xsl:text>Nome:</xsl:text>
        </fo:block>
    </fo:table-cell>
    <fo:table-cell font-size="10pt">
        <fo:block border-bottom="solid" border-bottom-width="0.2mm">
            <xsl:text>John</xsl:text>
            <fo:leader />
        </fo:block>
    </fo:table-cell>
</fo:table-row>

enter image description here

答案 1 :(得分:2)

这是一种黑客攻击,但您可以使用fo:list-block ...

<强> XSL-FO

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in">
            <fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="my-page">
        <fo:flow flow-name="xsl-region-body">
            <fo:table width="50%">
                <fo:table-body>
                    <fo:table-row>
                        <fo:table-cell border-style="solid" padding="4px">
                            <fo:list-block provisional-distance-between-starts="15%">
                                <fo:list-item>
                                    <fo:list-item-label end-indent="label-end()">
                                        <fo:block>Name:</fo:block>
                                    </fo:list-item-label>
                                    <fo:list-item-body start-indent="body-start()">
                                        <fo:block text-align="center" border-bottom-style="solid">John</fo:block>
                                    </fo:list-item-body>
                                </fo:list-item>
                            </fo:list-block>
                        </fo:table-cell>
                    </fo:table-row>
                </fo:table-body>
            </fo:table>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

PDF输出(使用FOP 1.0)

enter image description here

您可能需要使用provisional-distance-between-starts来查看对您的数据有用的内容。