Skip to main content

HTTP server that renders HTML to PDF

Project description

https://img.shields.io/pypi/v/html2pdf-server.svg https://img.shields.io/docker/automated/spoqa/html2pdf-server.svg

The name says it all. You request a POST with an HTML, and then you will get the response with the rendered PDF.

HTTP API

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...)

Available mime types

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.

Session in curl

$ 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:

Result screenshot

Getting started using Docker

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

Getting started without Docker

Installation

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.

Running server

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

License

Distributed under AGPLv3 or later.

Changelog

Version 1.2.0

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.

Version 1.1.0

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.

Version 1.0.0

Initial release. Released on January 25, 2017.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

html2pdf-server-1.2.0.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

html2pdf_server-1.2.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file html2pdf-server-1.2.0.tar.gz.

File metadata

File hashes

Hashes for html2pdf-server-1.2.0.tar.gz
Algorithm Hash digest
SHA256 6d3973021e33c67b066e15ffd3329556a3780f5e7179c258a793097dac86e42b
MD5 8fef551396ca8fcf6ed1a791b4600783
BLAKE2b-256 63924d7d4f1a0a0287a7a40617e59ba4a0e1ff3a0c138917d9a50b350be29a76

See more details on using hashes here.

File details

Details for the file html2pdf_server-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for html2pdf_server-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6714e97d9c0c470be9479505cc4d35e86c7cbd9f01c4ebd75ecae2530645d5e1
MD5 a78df8d1c2871aa2447a310f48022918
BLAKE2b-256 6c5bb663f99358dbe756e33eb9a400ad4a2f1b4f42b562aa18017e6a592895ae

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page