Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #requirements.txt
- xhtml2pdf
- mimerender
- #-----
- #controller.py
- from app.main.util import report_helper
- @api.route('/pdf')
- class PdfGenerate(Resource):
- @api.doc('generate a pdf')
- def get(self):
- """
- Generate a PDF from an html template file using jinja2 and xhtml2pdf
- :return: Generated PDF
- """
- html = report_helper.generate_report()
- resp = Response(html.getvalue())
- resp.headers['Content-Type'] = 'application/pdf'
- resp.headers['Content-Disposition'] = 'inline; filename=export.pdf'
- html.close()
- return resp
- #------
- #report_helper.py
- import jinja2
- from xhtml2pdf import pisa
- from io import StringIO, BytesIO
- def create_pdf(data):
- pdf = BytesIO()
- pisa.pisaDocument(StringIO(data), pdf)
- return pdf
- def generate_report():
- return create_pdf(
- render_template('report.html')
- )
- def render_template(name):
- template_loader = jinja2.FileSystemLoader(searchpath='./app/main/util/')
- template_env = jinja2.Environment(loader=template_loader)
- template = template_env.get_template(name)
- output_text = template.render(
- start_date='Mon 03 May',
- end_date='Mon 10 May',
- user='Jeff'
- )
- return output_text
- #------
- #report.html
- <html>
- <head>
- </head>
- <body>
- {% block body %}
- <h2>Some page title.</h2>
- <table width="100%" cellpadding="4" cellspacing="0">
- <tbody>
- <tr>
- <td width="100%">Some text.</td>
- </tr>
- </tbody>
- <tbody>
- <tr style="border: 1px solid #000000;">
- <td width="100%">
- <h3 style="text-align: center;">Some subtitle</h3>
- <div>{{ user }}</div>
- <div>{{ start_date }} - {{ end_date }}</div>
- </td>
- </tr>
- </tbody>
- </table>
- <hr style="margin: 3em 0;"/>
- {% endblock %}
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement