Skip to content
Snippets Groups Projects
Verified Commit e5807b77 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Refactor: Move TeX and PDF code to util functions.

parent a7984f7b
No related branches found
No related tags found
No related merge requests found
from io import BytesIO
import logging import logging
import os
from django.apps import apps from django.apps import apps
from django.template.loader import get_template
from latex import build_pdf
TeckidsPerson = apps.get_model('ticdesk_account', 'TeckidsPerson') TeckidsPerson = apps.get_model('ticdesk_account', 'TeckidsPerson')
TeckidsGroup = apps.get_model('ticdesk_account', 'TeckidsGroup') TeckidsGroup = apps.get_model('ticdesk_account', 'TeckidsGroup')
...@@ -118,3 +122,19 @@ def get_relevant_groups(user): ...@@ -118,3 +122,19 @@ def get_relevant_groups(user):
continue continue
return relevant return relevant
def render_latex(template_name, context):
# Get the template and render it
tpl = get_template(template_name)
latex_str = tpl.render(context).encode('utf-8')
return latex_str
def tex_to_pdf(tex):
# Generate TEXINPUTS correctly
texinputs = settings.TEXINPUTS + [settings.MEDIA_ROOT, os.path.abspath(os.path.dirname(__file__)), '']
# Turn LaTeX string into file object
with BytesIO(latex_str) as latex_file:
# Build PDF
pdf = build_pdf(latex_file, texinputs=texinputs)
from io import BytesIO
import os
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
from django.http import JsonResponse, HttpResponse from django.http import JsonResponse, HttpResponse
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from django.template.loader import get_template
from django.urls import reverse from django.urls import reverse
from django.template.loader import get_template
from django_tables2 import RequestConfig from django_tables2 import RequestConfig
from latex import build_pdf
from .tables import PersonTable from .tables import PersonTable
from .util import filter_disallowed_persons, get_relevant_groups, may_see_group, may_see_person from .util import filter_disallowed_persons, get_relevant_groups, may_see_group, may_see_person
...@@ -105,18 +99,10 @@ def persons(request, group=None): ...@@ -105,18 +99,10 @@ def persons(request, group=None):
elif format == 'geojson': elif format == 'geojson':
return JsonResponse(geojson, safe=False) return JsonResponse(geojson, safe=False)
elif format == 'pdf' or format == 'tex': elif format == 'pdf' or format == 'tex':
# Get the template and render it latex_str = render_latex('ticdesk_org/%s.tex' % template, context)
tpl = get_template('ticdesk_org/%s.tex' % template)
latex_str = tpl.render(context).encode('utf-8')
if format == 'pdf': if format == 'pdf':
# Generate TEXINPUTS correctly pdf = tex_to_pdf(latex_str)
texinputs = settings.TEXINPUTS + [settings.MEDIA_ROOT, os.path.abspath(os.path.dirname(__file__)), '']
# Turn LaTeX string into file object
with BytesIO(latex_str) as latex_file:
# Build PDF
pdf = build_pdf(latex_file, texinputs=texinputs)
# Write HTTP response # Write HTTP response
res = HttpResponse(pdf.data, content_type='application/pdf') res = HttpResponse(pdf.data, content_type='application/pdf')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment