在无头打印到 PDF 中禁用 Chrome 的默认页眉和页脚

Posted

技术标签:

【中文标题】在无头打印到 PDF 中禁用 Chrome 的默认页眉和页脚【英文标题】:Disable Chrome's default headers & footers in headless print-to-pdf 【发布时间】:2019-08-20 10:52:04 【问题描述】:

我有一个多页 html 文档,我想从命令行使用无头 Google Chrome / Chromium 将其导出为 PDF:chrome --headless --print-to-pdf [...]。问题在于,Chrome 在“打印”时会向页面添加自动生成的页眉和页脚。其他人建议在我的 CSS 中使用 @page margin: 0,但正如其他人所说,由于某种神奇的原因,这只适用于几页,因此我的示例的最后一页有一个页脚。

我知道 NPM package 支持不带标头的导出,但该导出比无头 Chrome 本身多花费大约 30% 的时间,并且需要在我公司的服务器上安装和设置 NPM 和包。

如果有人知道通过 CSS 或某些设置在无头 PDF 导出中隐藏 Google Chrome 的默认页眉/页脚的任何方法,请告诉我。


顺便说一句,由于我没有找到其他解决方案,所以我选择了NPM package。到目前为止,它运行良好且可靠,我的测试只花费了大约 30% 的时间,所以请记住这一点。

【问题讨论】:

我也在网上搜索这个问题的答案。 Google 构建了一个名为 Puppeteer 的 Node.js 解决方案,它允许您传递选项来创建自定义页眉/页脚或完全禁用它们。根本不支持 CLI,因此无法删除这些无用的调试信息。我希望他们默认禁用这个垃圾,它会导致很多额外的工作和神奇的代码只是为了删除这个反功能。 【参考方案1】:

在最新的 Google Chrome Canary 版本中为此提供了一个选项。使用--print-to-pdf-no-header 选项。

canary \
  --headless \
  --disable-gpu \
  --run-all-compositor-stages-before-draw \
  --print-to-pdf-no-header \
  --print-to-pdf=example.pdf \
  http://example.com

参考:source code

【讨论】:

这个新选项非常有趣。我找到了commit reference。但是,我没有找到它是在哪个 版本号 中发布的(如果有的话)。 确实,我在 Debian 上使用 Chromium 83(5 月中旬发布,补丁从 4 月中旬开始),--print-to-pdf-no-header 没有任何效果(但也没有错误...... )。 使用 Google Chrome 89.0.4379.0 canary 我能够使用--headless --disable-gpu --print-to-pdf=output1.pdf --print-to-pdf-no-header 使其工作。 这将令人沮丧地禁用 both 页眉和页脚。有没有办法禁用标头? 我知道 --print-to-pdf-no-header 在 Chromium 87 中可用【参考方案2】:

也许this thread 可以帮助你。基本上你需要在下面添加CSS

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

和“--no-margins”参数

【讨论】:

正如我的问题中所说的(有点),我已经尝试过这个。 (也带有--no-margins) 您使用的是最新版本的谷歌浏览器吗? 当然。只是为了澄清:设置margin: 0 确实适用于 1 或 2 页,但当我尝试使用 20 页或其他内容时,最后一页的页脚可见。 我还可以确认@d0n.key 在页脚剩余时遇到的这种确切行为。

以上是关于在无头打印到 PDF 中禁用 Chrome 的默认页眉和页脚的主要内容,如果未能解决你的问题,请参考以下文章

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

玩转Puppeteer

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

Qt 5.7:使用无头 QWebEngine

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

系统无法找到指定的文件,但在命令行中直接工作