The name says it all. You request a POST
with an HTML, and then you
will get the response with the rendered PDF.
Send POST /
request with Content-Type: text/html
e.g.:
POST / HTTP/1.1
Content-Type: text/html; charset=utf-8
Accept: application/pdf
<!DOCTYPE>
<html>
<body>
<h1>HTML to be rendered to PDF</h1>
<p>This document will be rendered to PDF.</p>
</body>
</html>
(Note that you have to set Accept: application/pdf
header.)
And then you will get a PDF document through its response e.g.:
HTTP/1.1 200 OK
Content-Type: application/pdf
Server: html2pdf-server
(...omitted...)
You can set Accept
header to various mime types.
- application/pdf
- respond a PDF document. this type is the default type.
- image/png
- respond a PNG image.
- image/jpeg
- respond a JPEG image.
$ cat input.html
<!DOCTYPE>
<html>
<body>
<h1>HTML to be rendered to PDF</h1>
<p>This document will be rendered to PDF.</p>
</body>
</html>
$ curl --header 'Content-Type: text/html' \
--data "`cat input.html`" \
--output output.pdf \
http://localhost:8080/
$ open output.pdf # Use xdg-open on Linux
Result screenshot:
Due to its non-Python dependencies the easist way to use this is using Docker. The official Docker image exposes 8080 port for HTTP server.
$ docker run -p 8080:8080 spoqa/html2pdf-server
If you need a pong endpoint for health check specify PONG_PATH
environment
variable:
$ docker run -e PONG_PATH=/ping/ -p 8080:8080 spoqa/html2pdf-server
Serving on http://0.0.0.0:8080
You can install it using pip
:
$ pip install --user git git://github.com/spoqa/html2pdf-server.git
Note that WeasyPrint has several dependencies that need to be installed using system package managers e.g. APT, Homebrew. Read the docs.
Use html2pdfd
command:
$ html2pdfd --port 8080
Serving on http://0.0.0.0:8080
Or you can use your preferred WSGI server as well (WSGI endpoint is
html2pdfd:app
):
$ aiohttp-wsgi-serve html2pdfd:app
Serving on http://:::8080 http://0.0.0.0:8080
Distributed under AGPLv3 or later.
Released on January 31, 2017.
- Fixed a crash during the server prints the first log.
Released on January 31, 2017.
- Docker image now includes built-in fonts for Chinese/Japanese/Korean.
Released on January 27, 2017.
- The prerequisite Python version became 3.5 or higher. Python 3.4 or lower are no more supported.
- Replaced waitress with aiohttp-wsgi.
- The Docker image now uses Python 3.5 instead of 3.4.
Released on January 26, 2017.
- Added an option to enable pong endpoint for health check.
PONG_PATH
environment variable for Docker.--pong-path
option for CLI.
- Fixed a bug that
--help
option crashed while it's trying to render default values.
Initial release. Released on January 25, 2017.