XSL - нижний колонтитул таблицы HTML, отображаемый динамически в позиции (изменяется в зависимости от количества строк в таблице) - PullRequest
0 голосов
/ 22 мая 2018

У меня есть лист XSL со встроенными тегами HTML, из которого я генерирую PDF с использованием Java.Я могу создать PDF с помощью этой таблицы стилей XSL.В моем XSL у меня есть такая модель:

Page 1:

Header 
 Table
    row 1
    row 2
    row 3
    row 4
    row 5
Footer

Page 2:

Header 
 Table
    row 6
    row 7
    row 8
    row 9
    row 10
Footer

Page 3:

Header 
 Table
    row 11
    row 12
    row 13
Footer

У меня должно быть 5 строк таблицы на страницу с верхним и нижним колонтитулами.Проблема в том, что я должен показывать нижний колонтитул в виде статического содержимого независимо от количества строк в таблице.

, например: если таблица содержит 5 строк или 4 или 3, или 2, или 1, нижний колонтитулдолжно быть внизу страницы.Вместо этого он отображается динамически под таблицей, так как размер таблицы изменяется.

Пожалуйста, найдите мой код таблицы стилей XSL ниже:

<xsl:copy-of select="$Header"/>

<xsl:copy-of select="$OrderRowsHeader"/>

<xsl:for-each select="orders">
    <table style=" width: 100%; height: 13mm;">

        <tr style="font-size: 10px; border: 0">
                        <td width="14mm" style="text-align: right; vertical-align: top;"><xsl:value-of select="number" /></td>
                        <td width="36mm" style=" text-align: left; vertical-align: top;"><xsl:value-of select="code" /></td>
                        <td width="47mm" style=" text-align: left; vertical-align: top;" ><xsl:value-of select="description" /></td>
                        <td width="12mm" style=" text-align: left; vertical-align: top;"><xsl:value-of select="units" /></td>
                        <td width="16mm" style=" text-align: right; vertical-align: top;"><xsl:value-of select="quantity" /></td>
        </tr>
    </table>


    <xsl:if test="(position() mod 5) = 0 and ( position() !=  last() )">

            <xsl:copy-of select="$ReportFooter" />
            <div style="page-break-before: always" />

            <xsl:copy-of select="$Header"/>

            <xsl:copy-of select="$OrderRowsHeader"/>

    </xsl:if>
</xsl:for-each>

<xsl:copy-of select="$ReportFooter" />



<xsl:variable name="ReportFooter">
    <table style="border: solid thin #c0c0c0; border-collapse: collapse; width: 100%; ">
        <tr style="border: solid thin #c0c0c0; border-collapse: collapse;">
            <td width="150mm" style="border: solid thin #c0c0c0; border-collapse: collapse; font-size: 8px;">
            </td> 
                Some Text here......
            </tr>
    </table>
</xsl:variable>

<xsl:variable name="OrderRowsHeader">
    <table style="border: solid thin #c0c0c0; border-collapse: collapse; width: 100%;">

                    <tr style="border: solid thin #c0c0c0; font-size: 9px; border-collapse: collapse;">
                        <th width="18mm" style="border: solid thin #c0c0c0; border-collapse: collapse;">Line</th>
                        <th width="45mm" style="border: solid thin #c0c0c0; border-collapse: collapse;">Product code</th>
                        <th width="63mm" style="border: solid thin #c0c0c0; border-collapse: collapse;">Description</th>
                        <th width="18mm" style="border: solid thin #c0c0c0; border-collapse: collapse;">Units</th>
                        <th width="16mm" style="border: solid thin #c0c0c0; border-collapse: collapse;">Qty</th>
                    </tr>
    </table>
</xsl:variable>

1 Ответ

0 голосов
/ 23 мая 2018

Звучит так, будто вы столкнулись с проблемой стиля.Ваше решение найдено в CSS.Я не буду обращаться к вашему коду, кроме того, что относится к нижнему колонтитулу.

<xsl:variable name="ReportFooter">
    <table style="position: absolute; bottom: 0; border: solid thin #c0c0c0; border-collapse: collapse; width: 100%; ">
        <tr style="border: solid thin #c0c0c0; border-collapse: collapse;">
        <td width="150mm" style="border: solid thin #c0c0c0; border-collapse: collapse; font-size: 8px;">
        </td> 
            Some Text here......
        </tr>
    </table>
</xsl:variable>

Свойства, которые я добавил для добавления в таблицу: position: absolute; bottom: 0;

position: absolute будет иметь таблицу, игнорирующую поток страницы (то есть она не течет относительно других элементов), а bottom является мерой того, как далеко она находится от нижней части страницы, поэтому bottom: 0 поместит ее вдно родительского контейнера.

...