是否有 wkhtmltopdf 选项可以转换 html 文本而不是文件?

问题描述 投票:0回答:6

我最近偶然发现了 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

我的问题是:是否可以选择使用

<html><head></head><body><h1>This is a header</h1></body></html>
代替
www.host.com/page_to_print.html

感谢您的帮助。

html pdf wkhtmltopdf
6个回答
36
投票

您可以使用命令行将内容传输到 wkhtmltopdf 中。对于 Windows,请尝试以下操作:

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

这读起来像“echo

<h3>blep</h3>
,将其 stdout(标准输出流)输出到 wkhtmltopdf stdin(标准输入流)”。

wkhtmltopdf 命令中的破折号

-
表示它从标准输入而不是文件中获取输入。

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


3
投票

除了 pp 提供的答案之外。如果您不想转义

<
>
字符,您还可以执行以下操作:

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

2
投票

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

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

echo
命令不需要引号 - 但是,如果您不将文本放在引号之间,则需要对
<
>
字符进行转义(通过
^
)。

另一种尝试方法是将文本写入临时文件,在 Windows 上,这甚至可能更快,正如某些消息来源所述:

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

(也可以写成一行:只需在两个命令之间添加

&
即可。)


2
投票

使用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

只需确保您在

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


1
投票

我无法让

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


0
投票

问题已经得到解答,但我将其留在这里,因为它也解决了我的问题:

echo "<p>hello world</p>" | wkhtmltopdf - - > [output here, could be a file (like "c.pdf"), or something else]

此命令示例了如何通过管道输入和输出内容来使用

wkhtmltopdf
,无需将输入或输出保存到文件(如果需要,您也可以将其通过管道传递到文件)。

这对我很有用,因为我正在制作一个 Web 服务器,它将 html 文本作为输入并返回 pdf 的内容,而不将其保存到文件中。

完整的示例命令(应该成功创建一个名为 c.pdf 的文件,上面写有“hello world”):

echo "<p>hello world</p>" | wkhtmltopdf - - > c.pdf

© www.soinside.com 2019 - 2024. All rights reserved.