Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Build Status Go Report Card

HTTP service to generate PDF from Json requests

Install and run

The recommended method is to use the docker container by mounting your template directory (here with the provided example template directory):

docker run --rm -it -p 8888:8888 \
  --mount src=my_templates/,target=/etc/pdfgen/templates,type=bind \

If you rather not using Docker, you need to install wkhtmltopdf first, then run:

go install
PDFGEN_TEMPLATES=./templates pdfgen

Once installed you can test with something like this:

curl -H "Content-Type: application/json" -X POST -d @my_json_file.json \
  http://localhost:8888/invoice > result.pdf

Note that the rendering may differ depending on your os (especially OSX) and installed fonts, that's why it is recommended to test and develop on the Docker environment to get the same result in production.


The PDF are generated from HTML templates. These templates closely ressemble Django Templates.

the following template:

<h1>Hello, {{ user }}</h1>

can be generated with a application/json POST request:

{"user": "fred"}

The response is of type application/pdf and contains the resulting PDF.

Each PDF template should be in it's own directory under the root directory defined in the PDFGEN_TEMPLATES environment variable.

The urls endpoints will be generated from these directories names. For example a template in the directory invoice will be a reachable at a url that look like that: http://host:port/invoice

The template directory must contain an index.html file and optionnaly a footer.html file. Other assets like images and CSS should be in that directory too. Note that each PDF is generated in isolation and so your templates should use absolutes paths. For example if you use bower and have a path like that: invoices/bower_components/ you should have:

<link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap.min.css" media='screen,print'>

Finally don't forget to set the PDFGEN_TEMPLATES env variable to the path of your templates parent directory Alternatively you copy your templates to either : /etc/pdfgen/templates or ~/.templates.

Adding fonts

You could just create a new container with your fonts and rebuild the cache. Bellow an example Dockerfile.

FROM hyperboloide/pdfgen
COPY my_fonts /usr/local/share/fonts/
RUN  fc-cache -f -v


HTTP service to generate PDF from Json requests








No releases published


No packages published