0

我创建了一个带有表格的 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>
4

2 回答 2

1

我不确定您要达到什么效果。height="100%"上的使其fo:table成为其包含块高度的 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。)

于 2021-12-22T18:07:29.277 回答
0

从预期输出的图像来看,无论其内容的实际高度如何,您似乎都希望在主页区域周围有一个边框。

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

有几点值得一提:

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