#!/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 ") 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}")