|
|
| from fpdf import FPDF |
| import qrcode |
| import json |
| import io |
| import base64 |
|
|
| def generate_pdf(snapshot: dict): |
| |
| 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 = 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)) |
|
|
| |
| 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 |
|
|