我正在创建一个 xsl fo 表,该表将具有不同数量的列。该应用程序使用 Apache FOP 来显示转换后的文档。当列数较少时,一切都显示良好(即单元格的内容居中并完整显示,尽管有些列最终占用两行,因为文本换行)。但是,有些表格有超过 12 列,这就是问题所在:在列标题单元格中,列名一直位于单元格右侧,占据多行。看起来像是在换行,但即使是最后两个字符也似乎被切断了。文本不会泄漏到相邻单元格中。
这是输入 xml 文件,在这种情况下,为简洁起见,它是表格标题的一行,正文的一行。我没有包含 xsl 文档中引用的图表元素,因为该部分显示正确:
<exports>
<export>
<table>
<tblRow>
<hdrCell>Month</hdrCell>
<hdrCell>Allow Amt PEPM Med</hdrCell>
<hdrCell>Allow Amt PEPM Rx</hdrCell>
<hdrCell>Allow Amt PEPM Med and Rx</hdrCell>
<hdrCell>Allow Amt PMPM Med</hdrCell>
<hdrCell>Allow Amt PMPM Rx</hdrCell>
<hdrCell>Allow Amt PMPM Med and Rx</hdrCell>
<hdrCell>Employees Avg Med or Rx</hdrCell>
<hdrCell>Members Avg Med or Rx</hdrCell>
<hdrCell>Net Pay PEPM Med</hdrCell>
<hdrCell>Net Pay PEPM Rx</hdrCell>
<hdrCell>Net Pay PEPM Med and Rx</hdrCell>
<hdrCell>Net Pay PMPM Med</hdrCell>
<hdrCell>Net Pay PMPM Rx</hdrCell>
<hdrCell>Net Pay PMPM Med and Rx</hdrCell>
</tblRow>
<tblRow>
<tblCell>Jan 2010</tblCell>
<tblCell>11</tblCell>
<tblCell>202</tblCell>
<tblCell>213</tblCell>
<tblCell>26</tblCell>
<tblCell>30</tblCell>
<tblCell>56</tblCell>
<tblCell>56</tblCell>
<tblCell>44</tblCell>
<tblCell>11</tblCell>
<tblCell>22</tblCell>
<tblCell>33</tblCell>
<tblCell>12</tblCell>
<tblCell>12</tblCell>
<tblCell>24</tblCell>
<tblCell>1</tblCell>
</tblRow>
</table>
</export>
这是将输入文件转换为 xsl fo 的 xsl 文件。我是 xsl 的新手。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="exportPage">
<fo:region-body />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="exportPage">
<fo:flow flow-name="xsl-region-body">
<fo:block id="chartBlock">
<!-- THIS PART WORKS FINE -->
</fo:block>
<!-- THE PROBLEM PART -->
<fo:block id="tableBlock" margin="0.25in">
<xsl:apply-templates select="exports/export/table"/>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<!-- Creates the table -->
<xsl:template match="table">
<fo:table table-layout="fixed" width="100%" >
<fo:table-header>
<fo:table-row>
<xsl:apply-templates select="tblRow[position() = 1]"/>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<xsl:apply-templates select="tblRow[position() > 1]"/>
</fo:table-body>
</fo:table>
</xsl:template>
<xsl:template match="hdrCell">
<fo:table-cell background-color="#666" border-right-style="solid" border-right-width="1px" border-right-color="white" empty-cells="show">
<fo:block color="white" font-family="arial, helvetica, sans-serif" font-size="xx-small"><xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="tblCell">
<fo:table-cell border-bottom-style="solid" border-bottom-width="1px"
border-bottom-color="#E3E3E3">
<fo:block color="#7E7E7E" font-family="arial, helvetica, sans-serif" font- size="xx-small"><xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template >
<xsl:template match="tblRow[position() > 1]">
<fo:table-row>
<xsl:apply-templates />
</fo:table-row>
</xsl:template>
</xsl:stylesheet>
我尝试为每个表格单元格的块元素设置一个填充右属性,希望它将文本向左移动但无济于事。我尝试调整作为表格单元格子的每个块元素的“宽度”属性。我一般是 xsl 的新手,所以我不知道如何继续。指定具有特定宽度的元素会有帮助吗?我该怎么做才能确保表格的整个宽度显示在 pdf 中并且没有这种混乱、截断的单元格内容?此外,未指定的所有单位均以“px”为单位。
提前致谢,
布兰特