如何将现代 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.0
和 Not 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。你知道它是否可以创建可填写的表单输入,然后可以使用 Adobe Reader 填写和保存? @Prometheus 我认为它不会将您的 HTML 表单转换为表单数据格式。见问题github.com/thecodingmachine/gotenberg/issues/198 谢谢你,不知道为什么我的搜索没有找到。以上是关于如何将现代 HTML 转换为 PDF的主要内容,如果未能解决你的问题,请参考以下文章