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.