Chrome 无头打印到 PDF 中的其他选项

Posted

技术标签:

【中文标题】Chrome 无头打印到 PDF 中的其他选项【英文标题】:additional options in Chrome headless print-to-pdf 【发布时间】:2018-02-15 01:45:07 【问题描述】:

我再需要一次帮助。我正在尝试使用 chrome 的无头功能将页面打印为 pdf。但是,pdf 中存在页眉和页脚。我发现这个选项已经在 Devtools 中实现了。

https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF

但是,我找不到如何在 CLI 中使用这些选项。也可以从 selenium 调用 Devtools 吗?

此外,我如何在开发工具中调用 Page.PrintToPDF。我试图在控制台中运行该命令。它显示页面未定义。

【问题讨论】:

首先,您是否在命令行中使用这两个标志? --headless \ # 以无头模式运行 Chrome。 --disable-gpu \ #暂时需要。 今天遇到了类似的问题,发现目前唯一的解决办法似乎是使用chrome-debugging-protocol。对于另一个问题,我从 CLI 写了一个关于如何做到这一点的答案:***.com/a/51431779/1149404 【参考方案1】:

将此 CSS 添加到您创建的 PDF 页面中,以删除 Chrome Headless 实现的页眉和页脚。

CSS:

@media print 
  @page  margin: 0; 
  body  margin: 1.6cm; 

你应该像下面这样格式化你的命令来创建 PDF:

"C:\PATH\TO\CHROME\EXECUTABLE\FILE", "--headless","--disable-gpu","--print-to-pdf=" + directory path to where you want the file to go followed by the desired file name/fileName.pdf,"--no-margins", "the path to the file you want turned into a pdf"

示例 1:

C:\chrome-win/chrome --headless --disable-gpu --print-to-pdf=C:\user\fileName.pdf --no-margins C:\Projects\index.html

示例 2:

您还可以通过在命令行中导航到包含 Chrome 可执行文件的文件夹并运行以下命令来测试此功能:

chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/

【讨论】:

你在搞砸--print-to-pdf--print-topdf 这不能正确解决多页 PDF 的问题 - 它会删除除最后一页以外的所有页面的底部边距,以及除第一页以外的所有页面的顶部边距。我想除非你使用 DevTools API,否则没有办法在不破坏多页边距的情况下做到这一点...... codermonkeyfuel,这对我来说可以使用 Chrome 无头 Windows 和 Linux 库在任何页面上创建没有原始页边距的多页 PDF。创建一个新问题或在下面发布更多信息。我会帮你解决这个问题。 能否请您说明如何使用 CLI 添加 css 文件?如果我要保存的 url 是网页而不是本地 html 文件,我不明白该怎么做 过去,我使用 Phantomjs 修改现有页面,然后再将它们转换为 PDF,但我从未使用 Chrome Headless 来做同样的事情。我相信你可以用 puppeteer 注入我上面列出的 CSS:github.com/GoogleChrome/puppeteer【参考方案2】:

"/path/to/google-chrome" : 这是谷歌浏览器的路径。

'--headless' : 在没有完整浏览器 UI 的无头环境中的 Chrome 浏览器

'--run-all-compositor-stages-before-draw' : 防止在所有数据呈现之前创建 Pdf(在呈现所有数据之后将创建 pdf)。

'--virtual-time-budget = x: 它延迟了PDF的创建过程,这里x是毫秒。

'--print-to-pdf' :此标志创建给定 URL 的 pdf。

URL:网页的url。

PDF 页面格式(使用 CSS) 添加这个(到css文件):

 @media print 
            @page  margin: 0mm 0mm 0mm 0mm;
            size:8in 9.5in;
            
            

以上 CSS 代码对网页渲染没有影响,但仅对 PDF 中的页面格式有影响。

【讨论】:

我认为您不需要媒体查询,因为@page 仅用于打印。另外,根据developer.mozilla.org/en-US/docs/Web/CSS/@page 只能更改文档的边距、孤儿、寡妇和分页符。更改任何其他 CSS 属性的尝试将被忽略。【参考方案3】:

是的,如果您想以 pdf 格式下载网页,则需要添加此媒体查询。 参考 媒体打印 CSS https://developer.mozilla.org/en-US/docs/Web/CSS/@media

页面 CSS https://developer.mozilla.org/en-US/docs/Web/CSS/@page

【讨论】:

这看起来更像是对另一个答案/评论的评论,而不是新的答案。 此外,您已经在 2018 年发布了答案! ***.com/a/53552720/2227743

以上是关于Chrome 无头打印到 PDF 中的其他选项的主要内容,如果未能解决你的问题,请参考以下文章

chrome 无头浏览器中的 PDF url 验证失败 - protractor typescript f\w

切换选项卡时,带有无头 chrome 的 Selenium 无法获取 url

如何在无头 Chrome 中更改纸张尺寸 --print-to-pdf

QWebEnginePage 打印到 PDF 不会像 Google Chrome 一样打印 PDF 中的可选文本

Qt 5.7:使用无头 QWebEngine

Javascript 以编程方式调用 Chrome 对话框打印的“另存为 PDF”功能