如何将现代 HTML 转换为 PDF

Posted

技术标签:

【中文标题】如何将现代 HTML 转换为 PDF【英文标题】:How to convert modern HTML to PDF 【发布时间】:2018-07-14 02:50:12 【问题描述】:

在 2016 年,从命令行将 html 文件转换为 PDF 的最佳方法是使用 wkhtmltopdf。不幸的是,这似乎不再被真正维护了。它不支持像 flexbox 这样的很多东西。

可以使用无头铬/铬来做到这一点:

铬 --headless --print-to-pdf="path/to/pdf" https://your_url

但没有边距、纸张类型、页眉/页脚控制、屏幕大小等选项。

似乎没有计划将这些作为命令行选项添加到 headless chrome 中(需要使用开发工具界面): https://bugs.chromium.org/p/chromium/issues/detail?id=603559#c89

如何从命令行将 HTML 文件转换为 PDF 以控制文档的打印方式(如上边距等)并支持现代 html/css?当然,一旦可以从命令行转换,您也可以使用您选择的编程语言进行转换。

【问题讨论】:

【参考方案1】:

这是一个命令行工具,您可以使用它来将 HTML 页面转换为 PDF,就像在 chrome 中一样。安装后,您可以将它与任何您想要的编程语言(Python、Java、php 等)一起使用,以从 HTML 网页或文档自动生成 PDF。所有的依赖项都应该在未来得到很好的维护,所以它不应该像 wkhtmltopdf 这样难以维护的问题。

网址:

https://www.npmjs.com/package/chromehtml2pdf

https://github.com/dataverity/chromehtml2pdf

要安装它,你需要 npm,然后输入:

npm install chromehtml2pdf

或使其对系统上的所有用户全局可用

npm install -g chromehtml2pdf

命令行用法:

chromehtml2pdf --out=file.pdf --landscape=1 https://www.npmjs.com/package/chromehtml2pdf

如需帮助(查看所有可能的选项),请输入:

chromehtml2pdf --help

随时在 github 上提出拉取请求。

【讨论】:

UNMET PEER DEPENDENCY webpack@3.6.0Not compatible with your operating system or architecture: fsevents@1.2.4 在 Ubuntu 18.04 上 $ chromehtml2pdf --help /home/miguelfg/.nvm/versions/node/v6.4.0/lib/node_modules/chromehtml2pdf/index.js:144 (async () => ^ SyntaxError:意外的令牌(... 我已经更新了依赖项。你现在可以试一试;如果还有问题,可以在github上报告。 嗨@juacala,我在使用您的应用时遇到了点击展开内容here 的问题。你能给我一些关于这个问题的建议吗?非常感谢您的帮助!【参考方案2】:

如果您只想摆脱 Chrome 的默认页眉/页脚,并控制相关页面,则可以使用 CSS 来实现,而无需使用比简单命令行调用更复杂的东西。

@media print 
  @page  margin: 0; 

当然,您可能确实需要页面上的边距,因此您需要伪造这些边距。这样做的复杂性取决于您要发送到 PDF 的页面数量。如果您发出 1-pager,则链接答案中推荐的正文边距将起作用。如果没有,您将需要使用其他方法。例如,对于多个页面,您可以在左右添加 body padding,然后将每个页面的内容包装在一个标签中,并为顶部和底部设置边距。

https://***.com/a/15150779/176877

【讨论】:

【参考方案3】:

Project Gotenberg 做到了这一点,还有更多。包括margin操纵以及WebHooks、timeouts、merging等formats。

尝试一下

docker run --rm -p 3000:3000 thecodingmachine/gotenberg:6

例子

curl --request POST \
    --url http://localhost:3000/convert/url \
    --header 'Content-Type: multipart/form-data' \
    --form remoteURL=https://brave.com \
    --form marginTop=0 \
    --form marginBottom=0 \
    --form marginLeft=0 \
    --form marginRight=0 \
    -o result.pdf

- 使用 Google Chrome 无头浏览器进行 HTML 和 Markdown 转换

【讨论】:

你似乎很了解Gotenberg。你知道它是否可以创建可填写的表单输入,然后可以使用 Adob​​e Reader 填写和保存? @Prometheus 我认为它不会将您的 HTML 表单转换为表单数据格式。见问题github.com/thecodingmachine/gotenberg/issues/198 谢谢你,不知道为什么我的搜索没有找到。

以上是关于如何将现代 HTML 转换为 PDF的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PDF 转换为 HTML?

如何将html文件转成pdf 在线转换

如何将html模板(带图像)转换为pdf?

如何将 PDF 转换为 HTML?

如何将html内容转换为pdf? [复制]

如何使用php将html转换为pdf?