azube/core/doc_gen.py

35 lines
983 B
Python

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