XSLT中的内容自动换列

在xslt-fo中,经常会遇到在一页或者多页里,多列显示一篇文章的情况,因为内容从XML中读取,往往内容长度无法控制,这时候就需要自动换列,这个问题的解决办法其实很简单。

1.首先在master-layout中定义页面模版的时候,在region-body节中添加 column-count="2" column-gap="15pt" 这样2个属性,这里代表是BODY部分分为2列,列中间间隔为15PX

      <fo:simple-page-master master-name="pageHasLogoAndStatic" page-height="841.89pt" page-width="595.276pt" margin-top="32pt" margin-bottom="15.89pt" margin-left="45pt" margin-right="28pt">
        <fo:region-body margin-top="137.362pt" margin-bottom="0.6in" margin-left="179.092pt" precedence="true" column-count="2" column-gap="15pt"/>
        <fo:region-before extent="137.362pt" precedence="true"/>
        <fo:region-after extent="38pt" precedence="true"/>
        <fo:region-start extent="164.092pt" display-align="after" precedence="true"/>
      </fo:simple-page-master>

这个PDF要求是三列,并且左列中的内容是独立于BODY部分的,所以需要定义region-start部分,注意region-start部分的宽度,以及region-body部分的左边距,还需要注意的一点是各个部分的显示顺序,用precedence。否则region-start和region-before部分会发生定位的错误。

在页面内应用结构可以如下:

      <fo:flow flow-name="xsl-region-body">

        <fo:block span="all" space-after="2pt">

         单列的表格或者内容
        </fo:block>

        <fo:table table-layout="fixed" inline-progression-dimension.optimum="100%">
          <fo:table-column/>
          <fo:table-body font-size="8.5pt" line-height="12pt" font-weight="normal">
            <fo:table-row>
              <!--Research report right side column-->
              <fo:table-cell>

                多列的内容(自动换列)
              </fo:table-cell>
            </fo:table-row>
          </fo:table-body>
        </fo:table>
            
        <xsl:if test="$LastPageFlag">
          <fo:block id="lastpage"/>
        </xsl:if>
      </fo:flow>

注意如果在BODY区内不仅仅有需要多列显示的内容,还需要单列显示的部分的话,可以使用

        <fo:block span="all" space-after="2pt">

         单列的表格或者内容
        </fo:block>

这样的BLOCK来定义显示,使用属性 span="all"。

原文地址:https://www.cnblogs.com/qingzhou/p/1794396.html