使用fo:list块生成PDF时右对齐xml数据
我的XML输入中有数字列表,我可以将列表正文(文本内容)向右对齐,但数字仍然向左对齐。如何将包括数字/项目符号在内的整个列表向右对齐,默认情况下是向左对齐。 非常感谢您的帮助或指点,谢谢 电流输出:使用fo:list块生成PDF时右对齐xml数据,xml,xslt,xsl-fo,bi-publisher,Xml,Xslt,Xsl Fo,Bi Publisher,我的XML输入中有数字列表,我可以将列表正文(文本内容)向右对齐,但数字仍然向左对齐。如何将包括数字/项目符号在内的整个列表向右对齐,默认情况下是向左对齐。 非常感谢您的帮助或指点,谢谢 电流输出: 下面的编号列表 1.L清单1 2.R列表2您的模板存在一些问题: 您没有设置它,它与确定项目标签的宽度一起,因此您得到的宽度为24pt-6pt=18pt 您的项目标签没有所需的end indent=“label-end()”,并且项目正文缺少start indent=“body-start()”
下面的编号列表
1.L清单1
2.R列表2
您的模板存在一些问题:
- 您没有设置它,它与确定项目标签的宽度一起,因此您得到的宽度为24pt-6pt=18pt
- 您的项目标签没有所需的
,并且项目正文缺少end indent=“label-end()”
,因此它们的大小/位置不正确start indent=“body-start()”
<xsl:template match="LI|li">
<fo:list-block text-align="end" provisional-distance-between-starts="3cm"><!-- set the value you want! -->
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block>
<xsl:variable name="value-fetcher">
<xsl:choose>
<xsl:when test="../@start">
<xsl:number value="count(preceding-sibling::li) + count(preceding-sibling::LI)+ ../@start"/>
</xsl:when>
<xsl:otherwise>
<xsl:number value="count(preceding-sibling::li) + count(preceding-sibling::LI) + 1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:number value="$value-fetcher" format="1."/>
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>
<xsl:apply-templates select="text()"/>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</xsl:template>
在我看来,右对齐、可变宽度的列表并不是
fo:list block
设计的目的
假设您的FO格式化程序实现了FO:table和caption
,您可以创建一个看起来像您想要的表:
<table-and-caption text-align="right">
<table text-align="left">
<table-body>
<table-row>
<table-cell padding="1pt">
<block>1.</block>
</table-cell>
<table-cell padding="1pt">
<block>L List 1</block>
</table-cell>
</table-row>
</table-body>
<table-body>
<table-row>
<table-cell padding="1pt">
<block>2.</block>
</table-cell>
<table-cell padding="1pt">
<block>R list 2</block>
</table-cell>
</table-row>
</table-body>
</table>
</table-and-caption>
或者您可以使用fo:leader
()将fo:inline容器推到右侧:
<block>
<leader leader-length.optimum="100%"/><inline-container>
<table>
感谢您的回复,这些回复总是很有用的
通过以下xslt实现对齐:
感谢您的回复,通过设置开始之间的临时距离=“14cm”,我可以获得样本输入的预期输出,但随着重叠列表字符串大小的增加,情况并非总是如此。是否可以根据字符串大小或页面宽度动态计算“开始之间的临时距离”。基本上,我的字符串大小将根据用户输入的文本进行更改。谢谢。答案更新:如果用户输入的文本只有一行,这就更简单了!感谢您的回复,“fo:table and caption”还不受支持,是否有其他方法可以实现这种格式设置。
<block-container writing-mode="rl">
<table text-align="left" writing-mode="lr">
<block>
<leader leader-length.optimum="100%"/><inline-container>
<table>