如何使用phantomjs节点设置dpi?

我正在使用phantomjs节点模块。 下面是从我得到这个模块的链接。

https://github.com/sgentle/phantomjs-node

这真的很好,当我从HTML创build一个JPG图像文件。 但其默认的“dpi”是72,这不利于打印图像文件。 所以我想在我渲染图像时设置dpi。

从上面的链接我读了一些像page.set('viewportSize',{宽度:640,身高:480})的例子。 它完美地设置图像大小。 但我想设置图像的DPI,请指导我如何实现这一目标。

var phantom = require('phantom'); phantom.create(function (ph) { ph.createPage(function (page) { page.open("http://www.google.com", function (status) { page.render("bla.jpg"); ph.exit(); }); }); }); 

有两种方法。

1.缩放

您可以使用page.zoomFactor来放大页面。 在更改zoomFactor之前,您必须相应地增加视口大小 :

 page.viewportSize = { width: 1600, height: 800 }; page.zoomFactor = 300.0/72.0; page.render("zoom4.jpg"); 

2. PDF

如果你关心的质量,然后呈现页面的PDF。 PDF是基于vector的,你可以尽可能多地放大。 当你给文件名render时,它使用pdf扩展名工作:

 page.render("bla.pdf"); 

您可以看到rasterize.js示例如何处理页面大小。 虽然有一些警告。 你必须记住调整呈现的PDF的宽度。 例如看这个(未答复)的问题 。

我的解决scheme是不使用幻影p​​df渲染过程,因为生成的pdf的质量是不可接受的糟糕的。

首先我以所需的dpi的分辨率生成图像。 对于我来说这是3300×2550(11in x 8.5in在300dpi),并使用2.364的页面缩放因子(最接近于11的因数,因为我们使用11pt字体到2550/1080; 26/11)保持相同的近似字体大小如1080p。 然后我使用外部工具(例如iText或Aspose)将生成的图像转换为pdf。 它打印精美,看起来不错的PDF。 我唯一的问题是存储空间有点大,因为每次运行都会生成一个3300×2550的图像文件。