# wkhtmltopdf — Convert HTML to PDF Using WebKit
> A command-line tool that renders HTML pages into PDF documents and images using the Qt WebKit engine. wkhtmltopdf faithfully reproduces CSS-styled pages including headers, footers, table of contents, and page breaks.
## Install
Save in your project root:
# wkhtmltopdf — Convert HTML to PDF Using WebKit
## Quick Use
```bash
# Install
apt-get install wkhtmltopdf # Debian/Ubuntu
brew install wkhtmltopdf # macOS
# Convert a webpage to PDF
wkhtmltopdf https://example.com output.pdf
# Convert a local HTML file with options
wkhtmltopdf --page-size A4 --margin-top 20mm report.html report.pdf
```
## Introduction
wkhtmltopdf is an open-source command-line tool that uses a patched Qt WebKit rendering engine to convert HTML and CSS into high-fidelity PDF documents. It is widely used in server-side report generation, invoice rendering, and document automation pipelines.
## What wkhtmltopdf Does
- Renders HTML pages to PDF with full CSS 2.1 and partial CSS 3 support
- Generates page headers and footers with dynamic page numbers and dates
- Creates a clickable table of contents from heading elements automatically
- Converts HTML to raster images (PNG, JPG, BMP, SVG) via the companion wkhtmltoimage tool
- Accepts input from URLs, local files, or standard input for pipeline integration
## Architecture Overview
wkhtmltopdf embeds a patched build of Qt WebKit that adds printing-specific features like page breaks and header/footer injection. The tool loads the HTML, waits for JavaScript execution and resource loading to complete, then renders the result to a PDF via Qt's QPrinter backend.
## Self-Hosting & Configuration
- Install from OS package managers or download static binaries from the project releases
- Run headless on servers without a display by using xvfb-run or the patched Qt build
- Pass options via the command line or an arguments file for repeatable builds
- Configure proxy, cookies, and custom HTTP headers for authenticated page rendering
- Embed in web applications using language bindings (Python: pdfkit, Ruby: wicked_pdf, Node: node-wkhtmltopdf)
## Key Features
- Faithful CSS rendering via a real browser engine rather than ad-hoc parsers
- JavaScript execution support for dynamic content and charting libraries
- Custom headers and footers with HTML templates and variable substitution
- Page break control with CSS properties (page-break-before, page-break-after)
- Batch conversion of multiple URLs or files into a single combined PDF
## Comparison with Similar Tools
- **Puppeteer / Playwright** — use headless Chromium for more modern CSS/JS support but require Node.js
- **WeasyPrint** — Python-based HTML-to-PDF with modern CSS but no JavaScript execution
- **Prince** — commercial engine with superior CSS Paged Media support
- **Pandoc** — converts Markdown/HTML to PDF via LaTeX; different rendering approach
- **pdf-lib / jsPDF** — programmatic PDF creation in JS; wkhtmltopdf takes HTML input
## FAQ
**Q: Is wkhtmltopdf still maintained?**
A: The project is in maintenance mode. It works well for existing use cases but new features are unlikely. For modern CSS/JS, consider Puppeteer or Playwright.
**Q: Can it run on a headless server?**
A: Yes. The patched Qt build supports headless operation. On older systems, use xvfb-run as a fallback.
**Q: How do I handle pages that require authentication?**
A: Pass cookies with --cookie or custom headers with --custom-header to authenticate requests.
**Q: Does it support CSS Grid and Flexbox?**
A: Support is limited because the underlying Qt WebKit engine predates widespread Grid and Flexbox adoption. Use Puppeteer for modern layouts.
## Sources
- https://github.com/wkhtmltopdf/wkhtmltopdf
- https://wkhtmltopdf.org/
---
Source: https://tokrepo.com/en/workflows/asset-215b7909
Author: AI Open Source