Cara Membuat Faktur PDF Otomatis dengan Python dan FPDF

Daftar Isi

Berikut adalah penjelasan detail dari script Python yang digunakan untuk membuat faktur menggunakan modul `FPDF`:

Import Modul

from fpdf import FPDF

Modul `FPDF` digunakan untuk membuat dokumen PDF. 


Definisi Kelas PDF

class PDF(FPDF):

    def header(self):

        # Tulisan "FAKTUR PEEKCODE" di tengah

        self.set_font('Arial', 'B', 16)

        self.cell(0, 10, 'FAKTUR PEEKCODE', 0, 1, 'C')

        

        # Deskripsi Toko di tengah

        self.set_font('Arial', 'I', 10)

        self.cell(0, 10, 'Service Laptop & Jasa Perbaiki Error', 0, 1, 'C')

        

        # Garis bawah tebal double

        self.set_line_width(1)

        self.line(10, 30, 200, 30)

        self.ln(10)


    def footer(self):

        self.set_y(-15)

        self.set_font('Arial', 'I', 8)

        self.cell(0, 10, f'Halaman {self.page_no()}', 0, 0, 'C')


Kelas `PDF` meng-extend `FPDF` dan meng-overwrite dua metode:

1. header: untuk mengatur header halaman dengan teks judul dan deskripsi toko, serta menambahkan garis bawah.

2. footer: untuk menambahkan nomor halaman di bagian bawah.


Fungsi create_invoice

def create_invoice():

    buyer_name = input("Masukkan Nama Pembeli: ")

    buyer_address = input("Masukkan Alamat Pembeli: ")

    buyer_city = input("Masukkan Kota Pembeli: ")


Bagian ini meminta input dari pengguna untuk nama, alamat, dan kota pembeli.


Pengumpulan Data Barang

    items = []

    while True:

        item_name = input("Masukkan Nama Barang (atau ketik 'selesai' untuk selesai): ")

        if item_name.lower() == 'selesai':

            break

        item_qty = int(input("Masukkan Jumlah Barang: "))

        item_price = float(input("Masukkan Harga Barang per Item: "))

        items.append({'Nama Barang': item_name, 'Qty': item_qty, 'Harga': item_price})


Loop ini digunakan untuk mengumpulkan data barang yang akan ditambahkan ke faktur. Pengguna dapat memasukkan nama barang, jumlah, dan harga satuan sampai mengetik 'selesai'.


Perhitungan Total

    total = sum(item['Qty'] * item['Harga'] for item in items)

Menghitung total harga dari semua barang.


Struktur Data Faktur

    invoice_data = {

        'buyer': {

            'Nama': buyer_name,

            'Alamat': buyer_address,

            'Kota': buyer_city

        },

        'items': items,

        'total': total

    }

Menyimpan data pembeli dan barang dalam sebuah dictionary `invoice_data`.


Penamaan dan Penyimpanan File PDF


    filename = input("Masukkan nama file PDF untuk menyimpan invoice (misalnya 'invoice.pdf'): ")

    if not filename.endswith('.pdf'):

        filename += '.pdf'


    pdf = PDF()

    pdf.add_page()


Bagian ini meminta nama file dari pengguna dan memastikan ekstensi file adalah `.pdf`, kemudian membuat objek `PDF` dan menambahkan halaman baru.


Baca Juga: loading

Informasi Pembeli dalam PDF

    pdf.set_font('Arial', 'B', 12)

    pdf.cell(0, 10, 'Informasi Pembeli:', 0, 1)

    pdf.set_font('Arial', '', 12)

    for key, value in invoice_data['buyer'].items():

        pdf.cell(0, 10, f'{key}: {value}', 0, 1)

Menambahkan informasi pembeli ke dalam PDF.


Daftar Barang dalam PDF

    pdf.line(10, pdf.get_y(), 200, pdf.get_y())

    pdf.ln(10)


    pdf.set_font('Arial', 'B', 12)

    pdf.cell(0, 10, 'Daftar Barang:', 0, 1)

    

    pdf.set_font('Arial', 'B', 10)

    col_widths = [60, 30, 50, 50]

    headers = ['Nama Barang', 'Jumlah Barang', 'Harga Satuan (Rp.)', 'Total Harga (Rp.)']

    for i, header in enumerate(headers):

        pdf.cell(col_widths[i], 10, header, 1, 0, 'C')

    pdf.ln(10)

    

    pdf.set_font('Arial', '', 10)

    for item in invoice_data['items']:

        pdf.cell(col_widths[0], 10, item['Nama Barang'], 1)

        pdf.cell(col_widths[1], 10, str(item['Qty']), 1)

        pdf.cell(col_widths[2], 10, f"{item['Harga']:.2f}", 1)

        pdf.cell(col_widths[3], 10, f"{item['Qty'] * item['Harga']:.2f}", 1)

        pdf.ln(10)


Bagian ini menambahkan header tabel barang, dan kemudian mengisi tabel dengan data barang yang dimasukkan sebelumnya.


Total Pembayaran

    pdf.line(10, pdf.get_y(), 200, pdf.get_y())

    pdf.ln(10)


    pdf.set_font('Arial', 'B', 12)

    pdf.cell(0, 10, f'Total Pembayaran: {invoice_data["total"]:.2f}', 0, 1)


Menambahkan garis pembatas dan total pembayaran.


Menyimpan File PDF

    pdf.output(name=filename, dest='F')

Menyimpan file PDF dengan nama yang telah ditentukan oleh pengguna.


Menjalankan Fungsi

if __name__ == '__main__':

    create_invoice()

Menjalankan fungsi `create_invoice` jika script dijalankan secara langsung.


Dengan script ini, pengguna dapat membuat faktur yang berisi informasi pembeli, daftar barang, dan total pembayaran dalam format PDF.

Contoh Hasil Source Code Python Nota Faktur

Muhammad Ulin Nuha
Muhammad Ulin Nuha PEEKCODE CHANNEL YOUTUBE Developer Android | Networking | Konten Creator peekcode YT | Galery | Pecinta Sholawat |

Posting Komentar