Invoice pdf Generator using python


In today’s digital world, automation has become a crucial aspect of streamlining various tasks. Python, being a versatile and powerful programming language, allows us to automate mundane processes efficiently. In this tutorial, we will learn how to create an Automated PDF Generator using Python. With this handy script, you can generate customized PDF invoices effortlessly, making it ideal for business or personal use.

Getting Started

Before we dive into the code, let’s ensure we have the necessary tools in place. We will be using the ‘reportlab’ library, which enables us to generate PDF documents programmatically. If you don’t have ‘reportlab’ installed, you can easily do so using the ‘pip’ package manager:

pip install reportlab

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def generate_custom_pdf(title, customer_data, items):
    pdf_file = f"{title}.pdf"

    # Create a new PDF document
    c = canvas.Canvas(pdf_file, pagesize=letter)

    # Set font and font size
    c.setFont("Helvetica", 12)

    # Write invoice header
    c.drawString(50, 750, title)

    # Write customer information
    c.drawString(50, 700, "Customer Information:")
    y_offset = 680
    for key, value in customer_data.items():
        c.drawString(50, y_offset, f"{key}: {value}")
        y_offset -= 20

    # Write items table header
    c.drawString(50, y_offset - 20, "Items")
    c.drawString(50, y_offset - 40, "Item Name")
    c.drawString(200, y_offset - 40, "Quantity")
    c.drawString(300, y_offset - 40, "Price")
    c.drawString(400, y_offset - 40, "Description")

    # Write items
    y_offset -= 60
    total_amount = 0

    for item in items:
        item_name, quantity, price, description = item
        c.drawString(50, y_offset, item_name)
        c.drawString(200, y_offset, str(quantity))
        c.drawString(300, y_offset, f"${price:.2f}")
        c.drawString(400, y_offset, description)

        total_amount += quantity * price
        y_offset -= 20

    # Write total amount
    c.drawString(200, y_offset - 20, "Total:")
    c.drawString(300, y_offset - 20, f"${total_amount:.2f}")

    # Save the PDF document

if __name__ == "__main__":
    # Take user input for invoice title
    title = input("Enter Invoice Title: ")

    # Take user input for customer information
    customer_data = {}
    customer_data["Name"] = input("Enter Customer Name: ")
    customer_data["Address"] = input("Enter Customer Address: ")
    customer_data["Email"] = input("Enter Customer Email: ")

    # Take user input for items
    items = []
    while True:
        item_name = input("Enter Item Name (or 'done' to finish): ")
        if item_name.lower() == "done":

        quantity = int(input("Enter Quantity: "))
        price = float(input("Enter Price: "))
        description = input("Enter Product Description: ")

        items.append((item_name, quantity, price, description))

    generate_custom_pdf(title, customer_data, items)

Understanding the Script

The core of our PDF generator is the generate_custom_pdf function. This function takes three inputs: the invoice title, customer information, and a list of items. It then leverages this data to create a dynamic PDF invoice.

Step 1:

Setting Up the PDF Document We begin by defining the name of the PDF file based on the provided invoice title. Next, we use the ‘reportlab’ library to create a new PDF document using the ‘canvas.Canvas’ class. We set the font and font size to create a visually appealing document.

Step 2

Writing the Invoice Header and Customer Information At the top of the PDF, we write the invoice header, displaying the title along with the invoice number. Below that, we include a section for customer information. This is where we leverage a dictionary to take inputs such as the customer’s name, address, and email. The script then dynamically writes this information onto the PDF.

Step 3

Handling Item Details The exciting part comes when we create a table for the purchased items. The script prompts the user to enter details for each item, such as the item name, quantity, price, and even a brief product description. The PDF dynamically generates table rows for each item based on the user’s inputs, making it incredibly versatile and customizable.

Step 4

Calculating the Total Amount Throughout the process of adding items to the PDF, the script keeps track of the total amount. It does this by calculating the sum of the product of the quantity and price for each item.

Step 5

Saving the PDF Document Once all the data is added to the PDF, the script displays the total amount at the end of the table to provide a clear overview of the invoice. Finally, the PDF document is saved with the provided title as the file name.


Congratulations! You have successfully built an Automated PDF Generator using Python. This powerful script allows you to create personalized and dynamic PDF invoices, making it a valuable tool for businesses and individuals alike. The ‘reportlab’ library’s flexibility and Python’s simplicity enable you to customize the script further, adding more features and improving the design to suit your specific needs.

Feel free to experiment, enhance, and use this script to automate various PDF generation tasks efficiently. Python’s automation capabilities offer endless possibilities, making it an essential language for simplifying your everyday workflows.

So, get coding, and enjoy the power of automation with Python!

Leave a Reply