45 lines
1.5 KiB
Python
Executable file
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}")
|