nqfs/demonstration/generer-facture-pdf.py

45 lines
1.5 KiB
Python
Executable file

#!/usr/bin/env python3
import json
import sys
from pathlib import Path
import qrcode
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
if len(sys.argv) != 3:
print("Usage: generer-facture-pdf.py <entree.json> <sortie.pdf>")
sys.exit(1)
src = Path(sys.argv[1])
pdf_out = Path(sys.argv[2])
qr_out = pdf_out.with_suffix(".png")
with open(src, "r", encoding="utf-8") as f:
data = json.load(f)
payload = "NQFS:" + json.dumps(data, ensure_ascii=False, separators=(",", ":"))
img = qrcode.make(payload)
img.save(qr_out)
c = canvas.Canvas(str(pdf_out), pagesize=letter)
w, h = letter
c.setFont("Helvetica-Bold", 14)
c.drawString(50, h - 50, data["supplier_name"])
c.setFont("Helvetica", 11)
c.drawString(50, h - 90, f"Facture : {data['invoice_number']}")
c.drawString(50, h - 110, f"Date : {data['invoice_date']}")
c.drawString(50, h - 130, f"Échéance : {data.get('due_date', '')}")
c.drawString(50, h - 150, f"Devise : {data['currency']}")
c.drawString(50, h - 170, f"Sous-total : {data['subtotal']:.2f}")
c.drawString(50, h - 190, f"TPS : {data['tps_amount']:.2f}")
c.drawString(50, h - 210, f"TVQ : {data['tvq_amount']:.2f}")
c.drawString(50, h - 230, f"Total : {data['total']:.2f}")
c.drawString(50, h - 250, f"Référence : {data.get('reference', '')}")
c.drawString(50, h - 270, f"Description : {data.get('description', '')}")
c.drawImage(str(qr_out), w - 180, h - 240, width=120, height=120)
c.save()
print(f"PDF généré : {pdf_out}")