PlutoPrint
PlutoPrint is a lightweight and easy-to-use Python library for generating high-quality PDFs and images directly from HTML or XML content. It is based on PlutoBook’s robust rendering engine and provides a simple API to convert your HTML into crisp PDF documents or vibrant image files. This makes it ideal for reports, invoices, or visual snapshots.
Invoices Tickets
Installation
pip install plutoprint
PlutoPrint depends on PlutoBook. For faster installation, it is highly recommended to install PlutoBook and its dependencies manually beforehand. Otherwise, Meson will build them from source during installation, which can take significantly longer.
For Windows and Linux 64-bit users, PlutoPrint provides prebuilt binaries, so no additional setup is required.
Quick Usage
Generate a PDF from the command line with the installed plutoprint script:
plutoprint input.html output.pdf --size=A4
Generate PDF with Python
import plutoprint book = plutoprint . Book ( plutoprint . PAGE_SIZE_A4 ) book . load_url ( "input.html" ) book . write_to_pdf ( "output.pdf" )
Generate PNG with Python
import plutoprint import math book = plutoprint . Book ( media = plutoprint . MEDIA_TYPE_SCREEN ) book . load_html ( "Hello World" , user_style = "body { text-align: center }" ) width = math . ceil ( book . get_document_width ()) height = math . ceil ( book . get_document_height ()) with plutoprint . ImageCanvas ( width , height ) as canvas : canvas . clear_surface ( 1 , 1 , 1 ) book . render_document ( canvas ) canvas . write_to_png ( "hello.png" )
Generate Charts with Matplotlib
import plutoprint import matplotlib . pyplot as plt import urllib . parse import io class CustomResourceFetcher ( plutoprint . ResourceFetcher ): def fetch_url ( self , url ): if not url . startswith ( 'chart:' ): return super (). fetch_url ( url ) values = [ float ( v ) for v in urllib . parse . unquote ( url [ 6 :]). split ( ',' )] labels = [ chr ( 65 + i ) for i in range ( len ( values ))] plt . bar ( labels , values ) plt . title ( 'Bar Chart' ) plt . xlabel ( 'Labels' ) plt . ylabel ( 'Values' ) buffer = io . BytesIO () plt . savefig ( buffer , format = 'svg' , transparent = True ) return plutoprint . ResourceData ( buffer . getvalue (), "image/svg+xml" , "utf-8" ) book = plutoprint . Book ( plutoprint . PAGE_SIZE_A4 . landscape (), plutoprint . PAGE_MARGINS_NONE ) book . custom_resource_fetcher = CustomResourceFetcher () HTML_CONTENT = """
""" USER_STYLE = """ div { display: flex; flex-wrap: wrap; justify-content: center; height: 98vh } img { flex: 0 0 45%; height: 50%; background: #fff; border: 1px solid #ccc; } body { background: #f7f7f7 } """ book . load_html ( HTML_CONTENT , USER_STYLE ) book . write_to_png ( "charts.png" ) book . write_to_pdf ( "charts.pdf" )
Expected output:
Samples
Invoices
Tickets
Links & Resources
License
PlutoPrint is licensed under the MIT License, allowing for both personal and commercial use.