import json from weasyprint import HTML, CSS from io import BytesIO from pdf2image import convert_from_bytes from PIL import Image from django.conf import settings from django.template.loader import render_to_string from .models import Berichtsheft from io import BytesIO def gen_doc_html(report: Berichtsheft): return render_to_string(f"report_template/{report.kind}.html", report.vars()) def gen_doc_pdf(report: Berichtsheft): main_content = gen_doc_html(report) pdf_buffer = BytesIO() HTML( string=main_content, ).write_pdf(pdf_buffer, stylesheets=[CSS(string="@page { size: A4; margin: 1cm }")]) pdf_buffer.seek(0) return pdf_buffer def gen_doc_png(report: Berichtsheft): pdf_buffer = gen_doc_pdf(report) pages = convert_from_bytes(pdf_buffer.getvalue(), 300) for page in pages: img_byte_array = BytesIO() page.save(img_byte_array, format="PNG") img_byte_array.seek(0) return img_byte_array