如何使用phantomjs节点设置dpi?

时间:2014-08-06 07:35:51

标签: node.js phantomjs

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

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

当我从html创建jpg图像文件时,这真的很好用。但其默认“dpi”为72,不适合打印图像文件。所以我想在渲染图像时设置dpi。

从上面的链接我读了一些例子,如page.set('viewportSize',{width:640,height: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();

    });
  });
});  

2 个答案:

答案 0 :(得分:5)

有两种方式。

1。变焦

您可以使用page.zoomFactor缩放页面。在更改zoomFactor之前,您必须相应地增加viewport size

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

2。 PDF

如果您关注质量,请渲染页面的pdf。 pdf是基于矢量的,您可以根据需要放大。当您将文件名提供给pdf

时,它可以使用render扩展名
page.render("bla.pdf");

您可以看到rasterize.js示例如何处理页面大小。但有一些警告。您必须记住调整渲染的pdf的宽度。例如,见(未答复)question

答案 1 :(得分:0)

我的解决方案是不使用in phantom pdf渲染过程,因为生成的pdf的质量无法接受。

首先,我以所需的dpi所需的分辨率生成图像。对我来说这是3300x2550(在300dpi时为11英寸x 8.5英寸)并且使用了页面缩放系数2.364(最接近11的除数因为我们使用11pt字体到2550/1080; 26/11)来保持相同的近似字体大小和1080p一样。然后我使用外部实用程序(例如iText或Aspose)将生成的图像推送到pdf中。它打印得很漂亮,在pdf中看起来很不错。我唯一的问题是存储空间有点大,因为每次运行都会生成3300x2550图像文件。