How to convert a html document into a pdf using report lab with python

johnsmith picture johnsmith · Jul 21, 2017 · Viewed 16k times · Source

I am trying to convert a html document that I have created into a pdf using report lab. The html document is below. I am unsure on how to do this and I have looked online and cant seem to find a solution for this.

html document

<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8">

  <title>Convert to Pdf</title>
</head>

<body>
 <h2>Convert to pdf</h2>
 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec at tempus massa. Quisque congue dui venenatis rutrum imperdiet. Nulla congue magna sit amet magna posuere, in elementum felis dapibus. Mauris maximus feugiat lorem, a bibendum orci fringilla a. Pellentesque rhoncus dignissim tempus. Aliquam semper convallis odio ut pharetra. Nunc bibendum neque at bibendum ornare. Curabitur lobortis odio ac turpis tincidunt, at venenatis nibh blandit. Integer id arcu maximus, blandit urna ut, tempor odio. Pellentesque tempus, mi a finibus pellentesque, ex magna lacinia elit, a semper nibh orci non nulla. Nunc felis metus, congue a odio vitae, porttitor pellentesque sem. Fusce vehicula tincidunt dolor at dictum. Integer cursus, risus quis finibus dapibus, nulla dolor dapibus massa, et luctus enim dui a nunc. Sed facilisis sapien at risus commodo, eget sollicitudin ex eleifend. Proin ipsum ipsum, condimentum in mauris vel, rutrum aliquam magna.

Aenean ac odio ante. Proin eget urna est. Fusce at dui dignissim, tincidunt magna eget, dictum nisl. Donec enim ipsum, feugiat a tristique vitae, suscipit non risus. Pellentesque libero leo, pellentesque ut neque ut, pharetra volutpat ex. Pellentesque purus neque, varius eu dolor eu, placerat ullamcorper velit. Etiam volutpat blandit tortor non pellentesque. Donec ac risus lacus. Pellentesque sagittis vitae odio quis vulputate. Praesent efficitur urna mollis, cursus tellus euismod, pulvinar sem. Morbi maximus orci nisi. Fusce tempor condimentum lacus nec pulvinar. Aenean tristique eu nibh vitae facilisis.

</p>
</body>
</html>

Answer

Willy satrio nugroho picture Willy satrio nugroho · Feb 9, 2018

If you use django framework you could use django-easy-pdf. I think it's the least painfull way to generate PDF from Html. Here's the template and views of my project:

#Import the easy_pdf rendering
from easy_pdf.rendering import render_to_pdf_response

#Here's the detail view function
def detail_to_pdf(request,id):
    template = 'renderdetail.html'
    kucing = Kucing.objects.get(id = id)
    context = {'kucing' : kucing}
    return render_to_pdf_response(request,template,context)

The Template is:

{% extends "base.html" %}

{% block extra_style %}
    <style type="text/css">
        body {
            font-family: "Helvetica", "sans-serif";
            color: #333333;
        }
    </style>
{% endblock %}

{% block content %}
    <div id="content">
        <div class="main">
            <h1>PROFILE : {{ kucing.nama }}- ID:{{ kucing.id }}</h1>
            <img src="/media/{{ kucing.foto }}"><br>
            <p>Nama : {{ kucing.nama }}</p><br>
            <p>Hp : {{ kucing.hp}}</p><br>
            <p>Poin : {{ kucing.poin }}</p><br>
            <a href="{% url 'kucing_makan' kucing.id %}">Makan</a>
            <a href="{% url 'kucing_berburu' kucing.id %}">Berburu</a>
            <hr>
            <h5><a href="{% url 'kucing_home' %}">Back To Home</a></h5>|
            <h5><a href="{% url 'kucing_list' %}">See Another Kucing</a></h5>
        </div>
    </div>
{% endblock %}

You also able to use Class Based Views by overriding PDFTemplateViews. You can see more on the Docs.