Do you need a simple open source cross-platform command line tool that converts web pages and HTML to a PDF file? Look no further, try wkhtmltopdf.
From the project home page:
Simple shell utility to convert html to pdf using the webkit rendering engine, and qt. Searching the web, I have found several command line tools that allow you to convert a HTML-document to a PDF-document, however they all seem to use their own, and rather incomplete rendering engine, resulting in poor quality. Recently QT 4.4 was released with a WebKit widget (WebKit is the engine of Apples Safari, which is a fork of the KDE KHtml), and making a good tool became very easy.
Software features
- Cross platform.
- Open source.
- Convert any web pages into PDF documents using webkit.
- You can add headers and footers.
- TOC generation.
- Batch mode conversions.
- Can run on Linux server with an XServer (the X11 client libs must be installed).
- Can be directly used by PHP or Python via bindings to libwkhtmltox.
A note about Debian / Ubuntu Linux user
You can install wkhtmltopdf using apt-get command:
$ sudo apt-get install wkhtmltopdf
$ sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/html2pdf
Sample outputs:
[sudo] password for vivek: Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: wkhtmltopdf 0 upgraded, 1 newly installed, 0 to remove and 10 not upgraded. Need to get 116 kB of archives. After this operation, 303 kB of additional disk space will be used. Get:1 http://debian.osuosl.org/debian/ squeeze/main wkhtmltopdf amd64 0.9.9-1 [116 kB] Fetched 116 kB in 2s (49.4 kB/s) Selecting previously deselected package wkhtmltopdf. (Reading database ... 274164 files and directories currently installed.) Unpacking wkhtmltopdf (from .../wkhtmltopdf_0.9.9-1_amd64.deb) ... Processing triggers for man-db ... Setting up wkhtmltopdf (0.9.9-1) ...
Install wkhtmltopdf on MacOS unix
Type the following command:
$ brew install wkhtmltopdf
OR
$ brew cask install wkhtmltopdf
Download wkhtmltopdf
Visit this page to grab wkhtmltopdf for Linux / MS-Windows / Apple Mac OS X. You can also use the wget command as follows:
$ wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
Sample outputs:
Resolving wkhtmltopdf.googlecode.com... 74.125.135.82, 2404:6800:4001:c01::52 Connecting to wkhtmltopdf.googlecode.com|74.125.135.82|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 11175276 (11M) [application/octet-stream] Saving to: `wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2' 100%[======================================>] 1,11,75,276 480K/s in 23s 2012-10-04 01:21:43 (477 KB/s) - `wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2' saved [11175276/11175276]
Install wkhtmltopdf under Linux
Type the following tar command to extract files:
$ tar xvf wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
Sample outputs:
wkhtmltopdf-amd64
Install the same in your private ~/bin/ directory or in /usr/local/bin directory:
$ mv wkhtmltopdf-amd64 ~/bin/
ln -s ~/bin/wkhtmltopdf-amd64 ~/bin/html2pdf
OR
$ sudo mv wkhtmltopdf-amd64 /usr/local/bin/
ln -s /usr/local/bin/wkhtmltopdf-amd64 /usr/local/bin/html2pdf
How do I use wkhtmltopdf?
The syntax is as follows:
html2pdf http://www.cyberciti.biz/path/to/url.html output.pdf html2pdf http://www.cyberciti.biz/blog/print/url-slut.html output.pdf html2pdf -option1 -option2 http://www.cyberciti.biz/blog/print/url-slut.html output.pdf
OR
wkhtmltopdf http://www.cyberciti.biz/path/to/url.html output.pdf wkhtmltopdf http://www.cyberciti.biz/blog/print/url-slut.html output.pdf wkhtmltopdf -option1 -option2 http://www.cyberciti.biz/blog/print/url-slut.html output.pdf
Example: Simple html to pdf file
In this example, convert out bash for loop page to a pdf file:
$ html2pdf http://www.cyberciti.biz/faq/bash-for-loop/print/ /tmp/bash.for.loop.pdf
Sample outputs:
Loading pages (1/6) Counting pages (2/6) Resolving links (4/6) Loading headers and footers (5/6) Printing pages (6/6) Done
To view generated pdf file click here. Verify pdf file, enter:
$ file /tmp/bash.for.loop.pdf
Sample outputs:
/tmp/bash.for.loop.pdf: PDF document, version 1.4
Use the pdfinfo command to prints the contents of the ‘Info’ dictionary (plus some other useful information) from a Portable Document Format (PDF) file:
$ pdfinfo /tmp/bash.for.loop.pdf
Sample outputs:
Title: Frequently Asked Questions About Linux / UNIX » Bash For Loop Examples » Print Creator: Producer: wkhtmltopdf CreationDate: Thu Oct 4 01:29:33 2012 Tagged: no Pages: 4 Encrypted: no Page size: 595 x 842 pts (A4) File size: 98792 bytes Optimized: no PDF version: 1.4
Grayscale pdf
The following PDF will be generated in grayscale:
$ html2pdf -g http://www.cyberciti.biz/faq/bash-for-loop/print/ bash.for.loop.pdf
Set orientation to Landscape or Portrait
Use the following syntax:
$ html2pdf -O Landscape http://www.cyberciti.biz/faq/bash-for-loop/print/ bash.for.loop.pdf
Where,
- -O Landscape|Portrait. The default is Portrait.
How do I set page size?
Use the following syntax:
$ html2pdf -S SIZE http://www.cyberciti.biz/faq/bash-for-loop/print/ bash.for.loop.pdf
Where,
- -s Size : Set paper size to: A4, Letter, etc. (default A4)
How do I generate table of content?
A table of content can be added to the document by adding a toc the command line option. For example:
$ html2pdf toc http://www.cyberciti.biz/faq/bash-for-loop/print/ bash.for.loop.pdf
Sample outputs:
How do I see all available options?
You can see a list of commonly used options, enter:
$ wkhtmltopdf --help
OR see all available options i.e. display more extensive help, detailing less common command switches, run:
$ wkhtmltopdf -H | less
References:
- wkhtmltopdf project home page.
🐧 Get the latest tutorials on Linux, Open Source & DevOps via:
- RSS feed or Weekly email newsletter
- Share on Twitter • Facebook • 17 comments... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
Thank you, very useful.
I use ‘Print to file’ mode in Linux and it can save a web page as pdf. Maybe wkhtmltopdf output has better quality?
Really nice. I think combining with ghostscript, we can use it for “webpages to screenshot” like use-cases.
Good stuff.
Its throwing an error.
How to solve it?
I tested this with wkhtmltopdf v0.11.0 rc1. I think this will get fixed in next release. I suggest you use stable version (amd64):
I installed wkhtmltopdf in my local computer in which GUI is installed. It’s working properly.
Next I installed the same in a Dedicated server in Remote Location, which is not having GUI interface..
I’m getting the below error message while I try to run wkhtml2pdf. and It’s creating an empty pdf file with 0KB. Do you know how to fix this error ?
Printing pages (6/6)
QPixmap: Cannot create a QPixmap when no GUI is being used===] Page 1 of 1
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
Great program, thanks! In ubuntu 12.04 wkhtmltopdf is in repository, so you need only “sudo apt-get install wkhtmltopdf”
The post has been updated.
Appreciate your feedback.
Hey,
I use htmldoc:
Thanks… Now can i convert a normal text file (non html) to PDF using this program? I tried and it threw an error.
This may help you. [eprg.org]
Great tutorial. I’ll definitely refer to this again. :)
html to pdf is but not big deal, otherwise, pdf2htmlex as the name self-explained which is a truly magnificent tool that should be noticed.
thanks!!! Great very useful!!
Thanks… Excelent program, but it throw error: wkhtmltopdf: cannot connect to X server. Is posible to make it to use only in therminal
Error on Debian 6.0: QPixmap: Cannot create a QPixmap when no GUI is being used