【问题标题】:How to handle PDF pagination in PhantomJS如何在 PhantomJS 中处理 PDF 分页
【发布时间】:2013-06-07 06:51:45
【问题描述】:

我正在使用 PhantomJS 从 html 创建 PDF。

它工作正常,但我不知道如何使用分页;我想为文档中的每个 div 创建一个页面,但在文档中找不到任何内容。关于分页。

如果我的文档很短,它只会制作一页,如果它更大,它会创建第二个空白页,我的内容在第一页,变得很长。

有什么想法吗? (我正在为nodeJS使用phantomJS-node模块)

【问题讨论】:

    标签: node.js pdf pdf-generation phantomjs


    【解决方案1】:

    PhantomJS 负责 webkit 的 css 实现。要实现手动分页符,您可以使用以下属性:

    • page-break-before:自动/总是/避免/...
    • page-break-inside:自动/总是/避免/...
    • page-break-after:自动/总是/避免/...

    例如,一个div可以是:

     <div style="page-break-before:always;"><!-- content --></div>
    

    <div style="page-break-after:always;"> <!-- content --></div>
    

    在 Webkit 中打印时控制分页有时并不容易,尤其是对于长 html 表格。

    【讨论】:

    • 将我的页面划分为 div,在每个页面上应用 page-break-after,除了最后一个。像魅力一样工作
    • 我也面临同样的问题,但是在每个页面上添加分页符后会产生很多空间,你能帮帮我吗?
    • PhantomJS 目前不支持“page-break-inside: Avoid;”
    • 根据github中的问题,它在源代码中已修复,但在可下载的版本中没有:“刚刚从源代码构建并已修复:)”github.com/ariya/phantomjs/issues/10638#issuecomment-42676356
    • 对于那些无法从源代码构建的人,请尝试 CSS Hack:github.com/ariya/phantomjs/issues/10638#issuecomment-20186253
    【解决方案2】:

    很晚了,但是我在使用 JsReport 时遇到了“break-inside:avoid”问题,通过将元素的显示类型更改为 inline-block 来解决这些问题。更多信息在这里: https://github.com/ariya/phantomjs/issues/10638

    【讨论】:

      【解决方案3】:

      你应该看到这个issue 有不同的提示。

      尝试在您不想因分页而中断的元素中使用display:inline-block。背后的原因是 webkit 已经尝试保护图像不被破坏。并且图像是内联块。

      【讨论】:

      • 这对我有用,将其更改为 display: table;允许元素分页。
      【解决方案4】:

      分页适用于:

       var page = webPage.create();
      
       page.paperSize = {
        format: 'A4',
        orientation: 'portrait',
        margin: '1cm'
       }
      

      在此处查看文档http://phantomjs.org/api/webpage/property/paper-size.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-06
        • 2020-02-24
        • 1970-01-01
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多