phantomjs 使内容适合 A4 页面

Posted

技术标签:

【中文标题】phantomjs 使内容适合 A4 页面【英文标题】:phantomjs fit content to A4 page 【发布时间】:2014-08-22 21:59:29 【问题描述】:

我想将 html 页面转换为 A4 大小的 PDF。

page.paperSize = 
  format: 'A4',
  orientation: 'portrait',
  border: '1cm'
;

有没有办法缩放网站以适应 A4 的宽度?

如果我有以下 HTML:

<div style="width:1500px; text-align:right;">
  right 1500px
</div>

div 的右端脱离页面。

我玩过viewportSize 属性:

page.viewportSize = 
  width: 480,
  height: 800
;

我原以为更大的视口宽度会导致页面的更大部分呈现为 PDF。

page.zoom

也没有达到预期的效果。

PDF 文件是报告。为了专业的外观,它们应该是 A4,而不是任意大小。

或者 phantomjs 是不是我的问题的错误工具?

我在 Ubuntu 12.04.4 上使用 phantomjs 版本 1.9.7。


编辑:

这里好像有三个不同的维度:

vieportSize 这是用于渲染的大小,如文档中所述 paperSize 是生成的 PDF 文档的大小 然后是屏幕尺寸。 phantomjs 总是适合纸张大小的一个屏幕的宽度。我的 phantomjs 版本的屏幕尺寸是 1024 x 768 像素。如果视口大于屏幕尺寸,则不会显示 1024 像素之外的所有内容。

我还没有找到改变屏幕大小的方法。

我通过将http://www.whatismyscreenresolution.com/ 渲染为 PDF 发现了这一点。

【问题讨论】:

您可以操纵元素/页面的宽度,使其适合文档。问题是这是否仍然看起来不错。顺便说一句,您使用哪个 phantomjs 版本和哪个操作系统? 而且我宁愿不必围绕 phantomjs 的要求来设计我的网站... 这里是另一个指针:你可以simulate a page zoom,但这可能会严重破坏你的页面。 【参考方案1】:

一种解决方案是创建一个与 A4 尺寸完全相同的元素,并将您的内容放入其中。这适用于我的机器:

.page
    position:relative;
    border: 0px;
    width:calc(210mm * 1.25);
    height:calc(297mm * 1.25);
    padding:0

请注意,我使用的缩放系数为 1.25。这是由于this issue。

【讨论】:

这似乎运作良好。我使用“评估”功能动态地完成它,它工作正常,例如document.querySelector('body').style.height = "calc(297mm * 1.25)" 我用过 (210 * 1.3),效果很完美,和 firefox 一样,使用缩放 130%

以上是关于phantomjs 使内容适合 A4 页面的主要内容,如果未能解决你的问题,请参考以下文章

scrapy使用PhantomJS和selenium爬取数据

在 C# winforms 中将 RDLC 报告适合 A4 页面

ImageMagick:将图像转换为 A4 页面大小的 PDF,图像适合页面

html页面,A4纸竖向打印,网页页面的宽度应该设置成多少?

Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器

使内容适合 iPhone 屏幕