在pdf中以宽度方式拟合内容

时间:2014-01-13 08:02:09

标签: pdf phantomjs

渲染为pdf时,我需要html页面为打印宽度的100%。否则内容会被切断。有一个简单的方法吗?

我提出了一种解决方法,它在渲染后获取html宽度,然后设置缩放系数以强制使用正确的宽度。

var page = require('webpage').create(),
    system = require('system'),
    dpi = 89.9, // strange, but that's what I get on Mac
    pageWidth = 210; // in mm

var getWidth = function() {
    return page.evaluate(function() {
        // get width manually
        // ...
        return width;
    });
};

page.paperSize = {format: 'A4', orientation: 'portrait'};

page.open(system.args[1], function (status) {
    window.setTimeout(function () {
        page.zoomFactor = (pageWidth / 25.4) * dpi / getWidth();
        page.render(system.args[2]);
        phantom.exit();
    }, 200);
});

寻找一个直接的解决方案,因为由于我使用的框架,获得宽度需要我做一些技巧。

2 个答案:

答案 0 :(得分:6)

通过添加以下CSS规则来管理解决此问题,该规则将缩小页面并使其适合:

 html {
    zoom: 0.60; 
  }

答案 1 :(得分:0)

按如下方式修改rasterize.js

备份rasterize.js

删除此块(约18-31行)

if (system.args.length > 4) {
    page.zoomFactor = system.args[4];
}
page.open(address, function (status) {
    if (status !== 'success') {
        console.log('Unable to load the address!');
        phantom.exit();
    } else {
        window.setTimeout(function () {
            page.render(output);
            phantom.exit();
        }, 200);
    }
});

将其替换为此代码块

 if (system.args.length > 4) {
        page.zoomFactor = parseFloat(system.args[4].split("=")[1]);
 }
 page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit(1);
        } else {
            window.setTimeout(function () {
console.log("zoomFactor: " + page.zoomFactor);
      page.evaluate(function(zoom) {
        return document.querySelector('body').style.zoom = zoom;
    }, page.zoomFactor); // <-- your zoom here
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });

然后您可以像这样将html导出为pdf:

~/bin/phantomjs ~/bin/phantomjs/examples/rasterize.js \ 
'http://example.com/index.html' \ 
mysite.pdf paperformat=A4 zoom=0.4