【问题标题】:Add content to the bottom of the last page将内容添加到最后一页的底部
【发布时间】:2012-02-03 20:31:20
【问题描述】:

我正在使用 wkhtmltopdf 从 HTML 创建 PDF 报告,我需要创建一个遵循此模式的自定义报告:

  1. 第一页顶部的一些信息。
  2. 一个可以有 1 到 n 行的表(它应该使用它需要的任意数量的页面)
  3. 最后一页末尾的一些信息。

将所有这些放在一起就可以了;但是,因为第 3 步的信息会立即出现在表格之后,有没有办法将内容放在页面末尾?

我什至不确定这个解决方案是基于 CSS 还是基于 wkhtmltopdf。

【问题讨论】:

    标签: css wkhtmltopdf


    【解决方案1】:

    http://madalgo.au.dk/~jakobt/wkhtmltoxdoc/wkhtmltopdf-0.9.9-doc.html

    查看“页脚和页眉”部分。

    您可以使用--footer-html 结合一些 JavaScript 来执行此操作。

    wkhtmltopdf --footer-html footer.html http://www.stackoverflow.com/ so.pdf
    

    我的footer.html 的内容基于上面链接中提供的示例:

    <!DOCTYPE html>
    
    <script>
    window.onload = function() {
        var vars = {};
        var x = document.location.search.substring(1).split('&');
        for (var i in x) {
            var z = x[i].split('=', 2);
            vars[z[0]] = unescape(z[1]);
        }
    
        //if current page number == last page number
        if (vars['page'] == vars['topage']) {
            document.querySelectorAll('.extra')[0].textContent = 'extra text here';
        }
    };
    </script>
    
    <style>
    .extra {
        color: red;
    }
    </style>
    
    <div class="extra"></div>
    

    【讨论】:

    • 谢谢,我有很多问题,因为我没有QT补丁版本,花了很多时间编译没有成功,直到我意识到页面中有二进制版本。
    【解决方案2】:

    这是一项相当艰巨的任务,我认为您目前无法使用纯 CSS 解决此问题(尽管我很乐意被证明是错误的)。

    此外,对确定分页符 (page-break-inside: avoid;) 的支持也不是最好的。事实上,到目前为止,我认为它不适用于表格。您可能最终会在 pagebrake 周围拆分一些行。 (Webkit 呈现一个 PDF,然后将其切割成单页,几乎不管边缘是什么......)

    我对这个困境的解决方案是创建单个页面大小的占位符 divs,然后在生成 PDF 之前在这些占位符之间分发带有一些编程语言的内容。

    在最后一个此类包装器中,您可以在底部添加一个绝对定位的页脚。

    这里是一些示例代码:

    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title>Sample Data</title>
        <style>
    
            * {
                padding: 0;
                margin: 0;
            }   
    
            .page {
                page-break-inside: avoid;
                height: 1360px;
    
                position: relative;
            }
    
            table {
                border-collapse: collapse;
                width: 100%;
            }
    
            td {
                border: 1px solid #ccc;
                padding: .23em;
            }
    
            .footer {
                position: absolute;
                color: red;
                bottom: 0;
            }
    
        </style>
    </head>
    <body>
    
    <div class="page one">
    
        <p>
            Some info Here... at the top of first page
        </p>
    
        <!-- Zen Coding: table>tbody>(tr>td>{A sample table}+td>{Foo bar})*42 -->       
    
        <table>
            <tbody>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
            </tbody>
        </table>    
    </div>
    
    <div class="page two">
        <table>
            <tbody>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
                <tr><td>A sample table</td><td>Foo bar</td></tr>
            </tbody>
        </table>
    
        <p class="footer">
            The last info here in the bottom of last page
        </p>
    </div>
    
    </body>
    </html>
    

    【讨论】:

    • 这似乎是一个有趣的想法,wkhtmltopdf 是如何转换它的dl.dropbox.com/u/1990697/out.pdf 当然,如果有必要,我愿意使用 javascript 解决方案。
    • @juanefren 您可能需要稍微调整一下页面容器的高度 (.page{height: 1360px;})。在我的机器上,它适用于我的示例代码。
    • @juanefren 您的附件不可用
    【解决方案3】:

    我很难理解你的意思。内容“紧跟在表格之后”和“在表格末尾”有什么区别?

    tfoot 元素可能就是你要找的:

    <table>
        <thead>
            <tr><th>Header</th></tr>
        </thead>
        <tfoot>
            <tr><th>Footer</th></tr>
        </tfoot>
        <tbody>
            <tr><td>Data</td></tr>
            <tr><td>Data</td></tr>
            <tr><td>Data</td></tr>
        </tbody>
    </table>
    

    如果不是,您能详细说明一下吗?您拥有的 HTML 的简短示例或它的外观和您希望它的外观的图片可能会有所帮助。

    【讨论】:

    猜你喜欢
    • 2019-04-04
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多