【问题标题】:How to convert modern HTML to PDF如何将现代 HTML 转换为 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?当然,一旦可以从命令行转换,您也可以使用您选择的编程语言进行转换。

【问题讨论】:

    标签: html css google-chrome pdf


    【解决方案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://stackoverflow.com/a/15150779/176877

    【讨论】:

      【解决方案3】:

      Project Gotenberg 做到了这一点,还有更多。包括margin操纵以及WebHookstimeoutsmergingformats

      尝试一下

      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
      • 谢谢你,不知道为什么我的搜索没有找到。
      猜你喜欢
      • 2012-01-12
      • 2011-09-02
      • 2010-12-31
      • 2011-02-23
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多