如何在 PhantomJS 中处理 PDF 分页
Posted
技术标签:
【中文标题】如何在 PhantomJS 中处理 PDF 分页【英文标题】:How to handle PDF pagination in PhantomJS 【发布时间】:2013-06-07 06:51:45 【问题描述】:我正在使用 PhantomJS 从 html 创建 PDF。
它工作正常,但我不知道如何使用分页;我想为文档中的每个 div 创建一个页面,但在文档中找不到任何内容。关于分页。
如果我的文档很短,它只会制作一页,如果它更大,它会创建第二个空白页,我的内容在第一页,变得很长。
有什么想法吗? (我正在为nodeJS使用phantomJS-node模块)
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何在 PhantomJS 中处理 PDF 分页的主要内容,如果未能解决你的问题,请参考以下文章
如何下载和保存PDF文件,该文件在PhantomJS的响应标题中作为附件接收?