Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fo:list块生成PDF时右对齐xml数据_Xml_Xslt_Xsl Fo_Bi Publisher - Fatal编程技术网

使用fo:list块生成PDF时右对齐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()”

我的XML输入中有数字列表,我可以将列表正文(文本内容)向右对齐,但数字仍然向左对齐。如何将包括数字/项目符号在内的整个列表向右对齐,默认情况下是向左对齐。 非常感谢您的帮助或指点,谢谢

电流输出:

下面的编号列表
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>