35 lines
983 B
Python
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
|