XSL FO Содержимое заголовка строки таблицы разбито

Я создаю таблицу 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, который преобразует входной файл в xsl fo. Я новичок в 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>

Я попытался установить свойство padding right для блочного элемента каждой ячейки таблицы, надеясь, что это сместит текст влево, но безрезультатно. Я попытался настроить свойство 'width' каждого элемента блока, который является дочерним элементом ячейки таблицы. Я новичок в xsl в целом, поэтому я не уверен, что делать дальше. Было бы полезно указать элементы с определенной шириной? Что я могу сделать, чтобы обеспечить полную ширину таблицы, отображаемой в формате PDF, и без этого перемешанного, усеченного содержимого ячейки? Кроме того, все единицы находятся в 'px', где не указано.

Заранее спасибо,

Brandt

1 ответ

Решение

Ответ: удаление margin="0.25in" из окружающего блока дает результат, который, я думаю, вы ожидаете (за исключением, конечно, для поля в этом блоке). Чтобы быть понятным, измените это:

<fo:block id="tableBlock" margin="0.25in">
      <xsl:apply-templates select="exports/export/table"/>
</fo:block>

И удалите поле = "0,25 дюйма".

Примечание. Это не тот результат, который вы получили бы от другого средства форматирования. Я использовал RenderX в вашем исходном файле, и вы получили то, что ожидали, и правильный результат. Я использовал FOP и получаю неверный результат, но удаляю этот отступ (который, очевидно, неправильно наследуется только одному измерению ячеек таблицы).

Еще одно примечание: у вас есть 15 ячеек заголовка и 16 ячеек в вашем образце.

Другие вопросы по тегам