from fpdf import FPDF import qrcode import json import io import base64 def generate_pdf(snapshot: dict): # Create QR code from lineage hash lineage_hash = snapshot.get("lineage", {}).get("lineage_hash", "") qr = qrcode.make(lineage_hash) qr_bytes = io.BytesIO() qr.save(qr_bytes, format="PNG") qr_data = qr_bytes.getvalue() # PDF structure pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.set_text_color(0, 102, 204) pdf.set_font("Arial", "B", 18) pdf.cell(200, 10, txt="AI Sovereign Sentinel", ln=True) pdf.set_font("Arial", "B", 14) pdf.cell(200, 10, txt="Enterprise Model Integrity Report", ln=True) pdf.ln(8) pdf.set_font("Arial", size=10) pdf.set_text_color(0, 0, 0) pdf.multi_cell(0, 6, txt=json.dumps(snapshot, indent=4)) # QR section pdf.ln(10) pdf.set_font("Arial", "B", 12) pdf.cell(200, 10, txt="Lineage Verification QR Code:", ln=True) qr_filename = "qr_temp.png" with open(qr_filename, "wb") as f: f.write(qr_data) pdf.image(qr_filename, x=10, y=pdf.get_y(), w=50) output_name = "Sovereign_Integrity_Report.pdf" pdf.output(output_name) return output_name