首页 文章

如何使用phantomjs节点设置dpi?

提问于
浏览
8

我正在使用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 回答

  • 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是基于矢量的,您可以根据需要放大 . 当您将文件名赋予 render 时,它使用 pdf 扩展名:

    page.render("bla.pdf");
    

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

  • 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图像文件 .

相关问题