【发布时间】:2017-11-18 10:15:11
【问题描述】:
我正在尝试使用 Google Chrome 代替 PhantomJS 将 HTML 呈现为 PDF。到目前为止,它对我来说效果很好。我唯一的问题是我没有找到任何方法来翻译以下 PhantomJS 代码:
page.paperSize = {
footer: {
contents: phantom.callback(function(pageNum, numPages) {
return "Power by MyWebsite. Created on "+formatDate(new Date())+"<span style='float:right'>" + pageNum + " / " + numPages + "</span>";
})
}
}
格式化日期与问题How to format a JavaScript date 的功能相同
但是我还没有找到一种方法可以在无头的情况下在 Google Chrome 中复制这种行为。 我正在使用来自 https://github.com/cyrus-and/chrome-remote-interface 的 Chrome 远程接口 (CDP)
这是我的chrome远程接口代码的大纲:
return new Promise(async function (resolve, reject) {
const url = "<MyURL here>";
const [tab] = await Cdp.List()
const client = await Cdp({ host: '127.0.0.1', target: tab });
await Promise.all([
Network.enable(),
Page.enable()
]);
Page.loadEventFired(function () {
setTimeout(function () {
resolve(Page.printToPDF({displayHeaderFooter:true}))); //https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF
}, 3000);
});
await Page.navigate({ url });
};
我得到的 PDF 很好,但只能得到默认的 Chrome 页眉和页脚。有什么办法修改吗?
注意:我意识到我可以在我的页面中使用 JavaScript 将元素附加到每个页面的底部,但我更喜欢在导出时更改浏览器附加的页脚/打印,因为我发现正确放置并且不会导致页面中其他 div 出现任何奇怪的重新流动更加可靠。
【问题讨论】:
-
当chrome处于窗口模式时,它也不支持更改页眉和页脚内容,所以我认为headless方法也不支持。从代码中的链接 (chromedevtools.github.io/devtools-protocol/tot/Page/…) 可以清楚地看出,没有这样的参数
-
使用 javascript 你将如何在每个页面的顶部添加元素?我知道我们可以在文档顶部添加元素,但我们将如何定位到最终 PDF 中每一页的顶部?
-
@kyriakos 您需要每个页面元素都在其自己的
div中才能实现。这是一个解决方案,但不是一个好的解决方案。
标签: javascript google-chrome google-chrome-headless