【问题标题】:如何将 xsl fo 表高度设置为 100%?
【发布时间】:2022-01-23 11:52:12
【问题描述】:

我创建了一个带有表格的 pdf 模板。

表格有边框;渲染完所有数据后,内容只覆盖了页面的一半,所以表格边框只覆盖了内容。
但我希望表格边框覆盖整个页面,无论内容的高度如何,如下所示:

  • 我尝试将表格高度设置为 100%,但没有成功。
  • 我也试过把block-progression-dimension.optimum="100%" 在最后一个表格单元格上;让我知道这是否是正确的地方
         <fo:page-sequence master-reference="A4-portrait">
            <fo:flow flow-name="xsl-region-body">
               <fo:block font-size="14pt" margin-bottom="11pt" height="100%">
                  <fo:table border-width="1pt" border-style="solid" height="100%" border-color="grey" margin-top="-110pt" font-family="Gotham Narrow A, Gotham Narrow B, Helvetica, Arial, sans-serif">
                     <fo:table-body>
                        <fo:table-row>
                           <fo:table-cell number-columns-spanned="2" margin-left="20pt">
                              <fo:block text-align="left" font-weight="bold" font-size="13pt" color="black" margin-bottom="2pt" margin-top="15pt" margin-left="-5pt">
                                 ${ctx.messages.repairInstructionTitle}      
                              </fo:block>
                              <fo:block text-align="left"  font-size="9pt" color="black">
                                 ${ctx.messages.repairInstructionMessage1}      
                              </fo:block>
                              <fo:block text-align="left"  font-size="9pt" color="black">
                                 ${ctx.messages.repairInstructionMessage2} 
                              </fo:block>
                              <fo:block text-align="left"  font-size="9pt" color="black">
                                 ${ctx.messages.repairInstructionMessage3} 
                              </fo:block>
                           </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row>
                           <fo:table-cell>
                              <fo:table margin-top="10pt" margin-bottom="15pt">
                                 <fo:table-column column-width="50%"/>
                                 <fo:table-column column-width="50%"/>
                                 <fo:table-body>
                                    <fo:table-row>
                                       #if ($ctx.orderData.deliveryAddress.country.isocode == 'US')
                                       <fo:table-cell margin-left="30pt" number-columns-spanned="1">
                                          <fo:block text-align="left" font-weight="bold" font-size="9pt" color="black">
                                             ${ctx.messages.repairQuestionForLocationMainland} 
                                          </fo:block>
                                          <fo:block text-align="left"  font-size="9pt" color="black">
                                             ${ctx.messages.mauijimIncMainland} 
                                          </fo:block>
                                          <fo:block text-align="left"  font-size="9pt" color="black">
                                             ${ctx.messages.repairDepartmentLable} 
                                          </fo:block>
                                          <fo:block text-align="left"  font-size="9pt" color="black">
                                             ${ctx.messages.repairDepartmentMainlandAddressLine1} 
                                          </fo:block>
                                          <fo:block text-align="left"  font-size="9pt" color="black">
                                             ${ctx.messages.repairDepartmentMainlandAddressLine2} 
                                          </fo:block>
                                       </fo:table-cell>
                                       <fo:table-cell margin-left="20pt">
                                          <fo:block text-align="left" font-weight="bold" font-size="9pt" color="black">
                                             ${ctx.messages.repairQuestionForLocationHawaii} 
                                          </fo:block>
                                          <fo:block text-align="left"  font-size="9pt" color="black">
                                             ${ctx.messages.mauijimIncHawaii} 
                                          </fo:block>
                                          <fo:block text-align="left"  font-size="9pt" color="black">
                                             ${ctx.messages.repairDepartmentLable}
                                          </fo:block>
                                          <fo:block text-align="left"  font-size="9pt" color="black">
                                             ${ctx.messages.repairDepartmentHawaiiAddressLine1} 
                                          </fo:block>
                                          <fo:block text-align="left"  font-size="9pt" color="black">
                                             ${ctx.messages.repairDepartmentHawaiiAddressLine2}
                                          </fo:block>
                                       </fo:table-cell>
                                       #end
                                    </fo:table-row>
                                 </fo:table-body>
                              </fo:table>
                           </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row>
                           <fo:table-cell margin-left="15pt" block-progression-dimension.optimum="100%">
                              <fo:block text-align="left"  font-size="13pt" color="black" font-weight="bold">
                                 ${ctx.messages.repairAnyQuestionText}
                              </fo:block>
                              #if (${ctx.orderData.deliveryAddress.country.isocode} == 'US')
                              <fo:block text-align="left"  font-size="9pt" color="black">
                                 ${ctx.messages.repairContactInfo}
                              </fo:block>
                              #end 
                              #if (${ctx.orderData.deliveryAddress.country.isocode} != 'US')  
                              <fo:block text-align="left"  font-size="9pt" color="black">
                                 #set($repairContactInfo = "repairContactInfo")
                                 #set($isocode = $ctx.orderData.deliveryAddress.country.isocode )
                                 #set($addMessage = "$repairContactInfo$isocode")   
                                 ${ctx.messages.getMessage($addMessage)}
                              </fo:block>
                              #end  
                           </fo:table-cell>
                        </fo:table-row>
                     </fo:table-body>
                  </fo:table>
               </fo:block>
            </fo:flow>
         </fo:page-sequence>

【问题讨论】:

    标签: xslt xsl-fo antenna-house


    【解决方案1】:

    我不确定你想要达到什么效果。 fo:table 上的 height="100%" 使其成为其包含块高度的 100%,但 fo:block 具有 margin-bottom="11pt",这降低了 fo:block 的可用高度,因此减少了 fo:table .

    height="100%" 为表格提供了固定高度,但margin-top="-110pt" 将表格向上移动了 110pt,因此我目前在表格后面看到了 110pt 的空白空间。

    如果你想要的东西真的是页面高度的 100%,请使用height="100pvh"。见https://www.antenna.co.jp/AHF/help/en/ahf-ext.html#pvh

    (另外,margin-left 不适用于fo:table-cell。)

    【讨论】:

    • 实际上 -110pt 用于 header 。我们在其他页面上有标题,但我们不希望在这个特定页面上有标题。所以顶部有一些空白空间来删除​​我们添加的空间 -110pt .. 这是没有边距 - imgur.com/a/Z6URy27
    • 这是预期的输出 --> imgur.com/a/d6Ug9hw
    • 我不清楚为什么你不只是为fo:region-bodyfo:simple-page-master 使用不同的边距。因为您使用的是 AH Formatter,所以您可以对表格使用嵌套的页面序列。见antennahouse.com/hubfs/xsl-fo-sample/structure/… 来自antennahouse.com/xsl-fo-samples#axf-page-sequence-1
    • 我真的不知道它是如何工作的,这是我第一次做这样的事情。我正在学习,因为我正在构建这个
    【解决方案2】:

    从预期输出的图像来看,您希望在主页区域周围有一个边框,而不管其内容的实际高度。

    因此,将fo:region-body元素中的边框定义移动并从fo:table中移除可能就足够了;您也可以考虑将表格完全移除,只保留其中包含的块,因为它似乎除了绘制边框之外没有任何功能。

    有几点值得一提:

    • 严格来说,XSL-FO Recommendation 不允许这样做(“填充和边框宽度特征的值必须为“0”。”),但通常是允许的格式化程序 (AntennaHouse Formatter allows it);
    • 如果所有页面都必须在主区域周围有边框,则此解决方案很容易实现;否则,您必须修改您的模板,以便为需要它的内容创建带有边框的区域主体的页面序列,并为其余内容创建使用不带边框的页面母版的不同页面序列。李>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      相关资源
      最近更新 更多