flyingsaucer html-to-pdf:如果表格跨越多个页面,则每个页面都缺少html表格行边框

jogvjijk  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(607)

我正在从html生成pdf。我有一个html格式的表格,它将跨越多个页面,当表格跨越多个页面时,我需要显示每个页面的最后一行边框。我没有表的行边框(这是预期的)。当表格不是以单页结束时,我应该显示最后一行的边框。下面是我的代码示例。
java代码:

String html = ""
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocumentFromString(html);
        renderer.layout();
        renderer.createPDF(outputStream);

html格式:

<html>
<head>
<style>

@page{

    @bottom-left {                 
        content: element(footer);  
        vertical-align: top;
        padding-top: 10px;
    }

    @top-right {
        content: element(header); 
        vertical-align: bottom;
        padding-bottom: 10px;
    }

    size: A4 portrait;
    margin-top:5.5cm; 
    margin-left:3cm; 
    margin-right:2cm; 
    margin-bottom:3.3cm; 
}

div.header {
    display: block;                     
    position: running(header);
    border-bottom: 1px solid black;
}

div.footer {
    margin-top: 0.5cm;
    display: block;
    position: running(footer);
    border-top: 1px solid black; 
}

div.content {
    display: block;
    width: 15.4cm; 
    text-align: justify;
}

# pagenumber:before {

    content: counter(page);
}

# pagecount:before {

    content: counter(pages);
}

</style>
</head>
<body>

    <div class="header">
        This is the header that will repeat on every page at top
    </div>

    <div class="footer" >
        <p>This is the footer that will repeat on every page at bottom</p>
        <p>Page <span id="pagenumber"></span> of <span id="pagecount"></span></p>
    </div>

    <div class="content">
        <table
            style="height: 250px; margin-top: 50px; border: 1px solid black"
            cellpadding="0" cellspacing="0">
            <tr class="heading" style="height: 1px;">

                <td>Item</td>
                <td>Quantity</td>
                <td style="width:100px">Price</td>
                <td style="text-align: right; padding-right: 20px;">Summa</td>
            </tr>

            <tr class="item" style="height: 24px; ">

                <td>Row 1</td>
                <td>19,75</td>
                <td style="width:100px">10,00</td>
                <td style="text-align: right; padding-right: 20px;">197,50</td>
            </tr>

            <tr class="item" style="height: 24px; ">

                <td>Row 2</td>
                <td>19,75</td>
                <td style="width:100px">10,00</td>
                <td style="text-align: right; padding-right: 20px;">197,50</td>
            </tr>

            <!-- 100 Rows -->

            <tr class="item" style="height: 24px; ">

                <td>Row N</td>
                <td>19,75</td>
                <td style="width:100px">10,00</td>
                <td style="text-align: right; padding-right: 20px;">197,50</td>
            </tr>

        </table>
    </div>
</body>
</html>

html到pdf输出后如下

trnvg8h3

trnvg8h31#

只需添加以下css:

table {
        -fs-table-paginate: paginate;
        border-spacing: 0;
    }

从旧的flying discer用户指南来看,其效果是“修改表布局算法,在后续页面上重复表的页眉和页脚,并改进跨页面的单元格外观(例如通过关闭和重新打开边框)”。由于您的表中没有任何页眉或页脚,因此只添加缺少的边框。
结果如下:

相关问题