渲染为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);
});
寻找一个直接的解决方案,因为由于我使用的框架,获得宽度需要我做一些技巧。
答案 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