Reputation: 3646
I recently stumbled on wkhtmltopdf and have found it to be an excellent tool for on-the-fly conversion from html to pdf in the browser.
A typical usage (in Windows) would go:
wkhtmltopdf.exe --some-option "<div>Some html <b>formatted</b> text</div>" www.host.com/page_to_print.html file.pdf
My question is: Is there an option to use <html><head></head><body><h1>This is a header</h1></body></html>
in place of www.host.com/page_to_print.html
?
Thanks for any help.
Upvotes: 18
Views: 26292
Reputation: 113
The question has been answered, but I'm leaving this here since it solved my problem too:
echo "<p>hello world</p>" | wkhtmltopdf - - > [output here, could be a file (like "c.pdf"), or something else]
This command exemplifies how to use wkhtmltopdf
by just piping content in and out, without needing to save the input or the output to a file (you can also pipe it to a file if you want).
It was useful to me because I was making a web server that takes html text as input and returns the pdf's content, without saving it to a file.
The complete example command (should successfully create a file called c.pdf, with "hello world" written on it):
echo "<p>hello world</p>" | wkhtmltopdf - - > c.pdf
Upvotes: 0
Reputation: 13402
You can pipe content into wkhtmltopdf using the command line. For Windows, try this:
echo "<h3>blep</h3>" | wkhtmltopdf.exe - test.pdf
This reads like "echo <h3>blep</h3>
, output it's stdout (standard out stream) to wkhtmltopdf stdin (standard in stream)".
The dash -
in the wkhtmltopdf command means that it takes it's input from stdin and not a file.
You could also echo HTML into a file, feed that file to wkhtmltopdf and delete that file inside a script.
Upvotes: 36
Reputation: 33
I couldn't get wkhtmltopdf
to work on my end converting raw html to PDF, but I did find a simple microservice that was able to do it with a couple minutes work on bantam.io.
Here's how it works:
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`
});
They also have options for taking in a URL rather than raw HTML and you can produce images as well as PDFs. Here are the docs: https://bantam.io/functions/@images/html?link=docs&subLink=0
Upvotes: 0
Reputation: 3646
Using PowerShell, you can do it like this:
$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
Just make sure you're running the code from within the \bin\
directory of wkhtmltopdf
, otherwise, you'd have to provide a full path to the executable.
Upvotes: 2
Reputation: 125
In addition to the answer provided by pp. If you prefer not to escape the <
>
characters, you can also do the following:
echo | set /p="<h3>Magical ponies</h3>" | wkhtmltopdf - test.pdf
Upvotes: 3
Reputation: 71
Just a correction to the answer provided by Nenotlep. As Jigar noted (in a comment to Nenotlep's answer), Nenotlep's command results in quotation marks preceding and following the actual text. On my system (Windows 10) this command is the correct solution:
echo ^<h3^>magical ponies^</h3^> | "C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" - test.pdf
The echo
command needs no quotation marks - but, if you do not put the text between quotation marks, the <
and >
characters need to be escaped (by ^
).
Another way to try out is writing the text into a temporary file, which - on Windows - might even be faster as some sources state:
echo ^<h3^>magical ponies^</h3^> > temp.txt
"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" - test.pdf < temp.txt
(This can also be written in one line: just put an &
between the two commands.)
Upvotes: 2