在无头打印到 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
chrome 无头浏览器中的 PDF url 验证失败 - protractor typescript f\w