我正在使用 Windows 中的命令行使用 Google Chrome 打印 PDF,并使用无头选项“打印为 PDF”。我想知道如何使用其他可用选项,如边距和页面大小,甚至方向。我注意到这些选项在https://chromedevtools.github.io/devtools-protocol/tot/Page#method-printToPDF
但根据这个问题,它似乎不起作用如何在 Linux 命令行上使用 Headless-Chromium 以横向模式打印网页?
是否有人使用过任何可用的选项,并且正确的语法是什么,因为下面的代码生成了 pdf 但忽略了页面大小?
chrome.exe --headless --disable-gpu --print-to-pdf=C:\\Spotfire_Export\\'+filename+'.pdf --paperWidth=15 '+tempFolder+filename+'.html
答案1
我认为通过命令行是不可能的。但是使用木偶师(NodeJS 库)你可以做更复杂的事情,例如:
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.chromestatus.com', {waitUntil: 'networkidle2'});
await page.pdf({path: 'page.pdf', format: 'A4'});
await browser.close();
})();
仅供参考,有一个名为幻影JS您可以通过 JavaScript 文件设置(页面大小、宽度、高度、页眉、页脚等),例如:
C:\phantomjs-2.1.1-windows\bin>phantomjs.exe ../examples/rasterize.js https://www.google.com sample.pdf
答案2
时间改变了能力,因此现代 Windows 包含基于 Chromium 的 MS Edge,而无需安装重复的 Chrome 套件。随着时间的推移,许多开关都已更新或更改。因此,在 2018 年之后不需要禁用 GPU。此外,“新建”现在是默认设置,因此也不需要,但页眉和页脚边距控件也已更改。
基本上使用
"c:\ path to \MSedge.exe" --headless --no-pdf-header-footer --print-to-pdf="C:\ path \filename.pdf" "drive:\Folder\filename.html"
注意:不能(在命令行中)尝试将内部媒体/CSS 更改为景观,必须通过 HTML 内部的编辑来完成。
但是,额外的开关可能有助于定时,例如--run-all-compositor-stages-before-draw
对于我的 HTML 编辑示例,要将内容切换为横向,我们可以添加 HTML 头部样式,例如 A4 横向:
<head>
<meta http-equiv="Content-Style-Type" content="text/css">
<style>@media print { @page { margin: 0; size: 842pt 595pt ; } body { margin: 0; } }</style>
</head>
但是,通过在 HTML 中添加我的样式覆盖,它将变为“横向”。(注意:奇怪的是,有 3 个条目,因此我只是将查找和替换行总共添加了 3 次,以达到过度的目的)。
"%programfiles%\Microsoft\Edge\Application\msedge.exe" --headless --no-pdf-header-footer --print-to-pdf="%cd%\landscape.pdf" "%cd%\command line headless options - Super User.html"