【问题标题】:Is there any wkhtmltopdf option to convert html text rather than file?是否有任何 wkhtmltopdf 选项来转换 html 文本而不是文件?
【发布时间】:2014-03-18 19:59:16
【问题描述】:

我最近偶然发现了 wkhtmltopdf,发现它是在浏览器中从 html 即时转换为 pdf 的绝佳工具。

一个典型的用法(在 Windows 中)是:

wkhtmltopdf.exe --some-option "<div>Some html <b>formatted</b> text</div>" www.host.com/page_to_print.html file.pdf

我的问题是:是否可以使用&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;This is a header&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt; 代替www.host.com/page_to_print.html?

感谢您的帮助。

【问题讨论】:

    标签: html pdf wkhtmltopdf


    【解决方案1】:

    您可以使用命令行将内容通过管道传输到 wkhtmltopdf。对于 Windows,试试这个:

    echo "<h3>blep</h3>" | wkhtmltopdf.exe - test.pdf
    

    这读起来像“echo &lt;h3&gt;blep&lt;/h3&gt;,将它的标准输出(标准输出流)输出到 wkhtmltopdf 标准输入(标准输入流)”。

    wkhtmltopdf 命令中的破折号- 表示它从标准输入获取输入,而不是文件。

    您还可以将 HTML 回显到文件中,将该文件提供给 wkhtmltopdf 并在脚本中删除该文件。

    【讨论】:

    • 感谢@Nenotlep 的关注。以您的示例为例(很抱歉分支到 php),是否可以将这种管道命令按原样放入 php 函数中,例如 shell_exec 或 system?你知道我实际上并没有直接为命令行编程;)
    • 我认为这是可能的,但我从未这样做过。管道的作用是捕获第一个命令的输出流并将其提供给第二个命令的输入流,因此您可能必须自己控制流。现在我从来没有用 PHP 做过这个,但是 PHP 网站上有一个很好的相关推荐:fi2.php.net/shell_exec#67183 - 虽然它很旧。抱歉,我目前没有自己测试的环境:(。
    • 即使我也在寻找同样的东西,非常有帮助的答案。但是您知道为什么它会在 pdf 中插入 "magical ponies"(带双引号)吗?如何解决?我执行了echo "&lt;h3&gt;magical ponies&lt;/h3&gt;" | wkhtmltopdf.exe - test.pdf
    【解决方案2】:

    只是对 Nenotlep 提供的答案的更正。正如 Jigar 所指出的(在对 Nenotlep 的回答的评论中),Nenotlep 的命令导致在实际文本之前和之后加上引号。在我的系统(Windows 10)上,这个命令是正确的解决方案:

    echo ^<h3^>magical ponies^</h3^> | "C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" - test.pdf
    

    echo 命令不需要引号 - 但是,如果您不将文本放在引号之间,则需要对 &lt; 和 &gt; 字符进行转义(^)。

    另一种尝试的方法是将文本写入一个临时文件,在 Windows 上,它甚至可能更快,因为某些来源指出:

    echo ^<h3^>magical ponies^</h3^> > temp.txt
    "C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" - test.pdf < temp.txt
    

    (也可以写成一行:在两个命令之间放一个&amp;。)

    【讨论】:

      【解决方案3】:

      除了pp提供的答案。如果您不想转义&lt;&gt;字符,您还可以执行以下操作:

      echo | set /p="<h3>Magical ponies</h3>" | wkhtmltopdf - test.pdf
      

      【讨论】:

        【解决方案4】:

        使用 PowerShell,您可以这样做:

        $html = "<h1>Magical Ponies</h1><p>Once upon a time in Horseland, there was a band of miniat
        ure creatures..."
        $html | .\wkhtmltopdf.exe - C:\temp\test.pdf
        

        只需确保您从wkhtmltopdf 的\bin\ 目录中运行代码,否则,您必须提供可执行文件的完整路径。

        【讨论】:

          【解决方案5】:

          我无法让 wkhtmltopdf 完成将原始 html 转换为 PDF 的工作,但我确实找到了一个简单的微服务,它能够在 bantam.io 上工作几分钟。

          它是这样工作的:

          bantam
           .run('@images/html', {
             html: `
             <h1 style='width: 400px; text-align: center'>TEST</h1>
             <br/>
             <img src='https://images.unsplash.com/photo-1507146426996-ef05306b995a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1950&q=80' />
             `,
             imageType: 'pdf',
           })
           .then(pdfUrl => {
              // pdf is temporarily hosted on AWS S3 via a secure link at `pdfUrl`
          });
          

          他们还可以选择接收 URL 而不是原始 HTML,并且您可以生成图像和 PDF。以下是文档:https://bantam.io/functions/@images/html?link=docs&subLink=0

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-31
            • 2014-07-23
            • 2016-04-24
            • 2011-07-08
            • 2021-01-23
            • 2021-11-08
            • 1970-01-01
            相关资源
            最近更新 更多