如何在 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 分页的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios中动态生成多页pdf时处理分页

如何下载和保存PDF文件,该文件在PhantomJS的响应标题中作为附件接收?

Phantomjs page-break-after:总是创建空格

页面直接导出为PDF文件,支持分页与页边距

页面直接导出为PDF文件,支持分页与页边距

vue页面生成pdf且避免分页截断处理