from jinja2 import Environment, FileSystemLoader from playwright.sync_api import sync_playwright from context import context_list env = Environment(loader=FileSystemLoader("report_gen")) html_pages = [] header_context = { "patient_name": "Keirstyn Moran", "age": 34, "height": "5'4\"", "weight": "123lbs", "focus": "Endurance", } footer_context = [ { "contact_email": "info@ishplabs.com ", "website": "www.ishplabs.com", "social": "@ishplabs", "page_number": i + 1, } for i in range(len(context_list)) ] header_html = env.get_template("header.html").render(header_context) footer_html_list = [ env.get_template("footer.html").render(context) for context in footer_context ] for i, context in enumerate(context_list): template = env.get_template(f"page_{i + 1}.html").render(context) if (i + 1) > 2: full_html = f"""
{header_html}
{template}
{footer_html_list[i]}
""" html_pages.append(full_html) else: html_pages.append(template) # Combine with page breaks final_html = "
".join(html_pages) # Wrap in full HTML document html_doc = f""" {final_html} """ # Generate PDF def html_string_to_pdf(html_content, pdf_path): with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() # Set the HTML directly page.set_content(html_content) # Export to PDF page.pdf(path=pdf_path, format="A4", print_background=True) browser.close() html_string_to_pdf(html_doc, "multi_page_report.pdf") # pdfkit.from_string(html_doc, "truth_report.pdf", options=options) print("✅ PDF generated: multi_page_report.pdf")