0.5.13 pdf articles export

This commit is contained in:
SDE
2024-07-16 17:35:33 +03:00
parent b132b9e087
commit f11a3f0463
15 changed files with 416 additions and 54 deletions

View File

@@ -9,6 +9,7 @@ from GeneralApp.funcs import get_inter_http_respose
from django.utils.translation import gettext_lazy as _
from django.urls import reverse
from collections import OrderedDict
from django.template.loader import render_to_string
def get_tree_arts(art, arts, sel_arts_ids):
@@ -27,22 +28,59 @@ def get_tree_arts(art, arts, sel_arts_ids):
return docs_tree
# def get_tree_arts(art, arts):
#
# docs_tree = OrderedDict()
# docs_tree.update({
# art['name']: {
# 'url': art['url'],
# 'id': art['id'],
# 'children': get_tree_arts(art, DocArt.objects.filter(parent=art)),
# } for art in arts.filter(parent=None)
# })
# return docs_tree
import os
def link_callback(uri, rel):
if settings.STATIC_URL and uri.startswith(settings.STATIC_URL):
path = os.path.join(settings.STATIC_ROOT, uri.replace(settings.STATIC_URL, ""))
elif settings.MEDIA_URL and uri.startswith(settings.MEDIA_URL):
path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
else:
path = os.path.join(settings.STATIC_ROOT, uri)
return path
def _response_pdf(path):
filePDF = open(path, 'rb')
content = filePDF.read()
# content = str(content)
filePDF.close()
response = HttpResponse(content, content_type='application/pdf')
response['Content-Disposition'] = 'filename="{fn}"'.format(fn=os.path.basename(path))
return response
def pdf_render(request, template, context, file_name):
from BaseModels.functions import url_translit
filename = url_translit(file_name)
html = render_to_string(template, context, request)
f = open(f'{settings.PDF_FOLDER}/{filename}.html', 'w')
f.write(html)
f.close()
os.system(
u'{wkhtmltopdf} --load-error-handling ignore --default-header {pdf_folder}/{file_name}.html {pdf_folder}/{file_name}.pdf'.format(
wkhtmltopdf=settings.WKHTML_TO_PDF, pdf_folder=settings.PDF_FOLDER, file_name=filename))
path = settings.PDF_FOLDER + '/' + filename + '.pdf'
# os.system(u'{wkhtmltopdf} {print_folder}/order{filename}.html {print_folder}/order{filename}.pdf'.format(wkhtmltopdf=settings.WKHTML_TO_PDF, print_folder=settings.PRINT_FOLDER))
return _response_pdf(path)
def DocsView(request, version=None, art_url=None):
if art_url and version:
generate_pdf = False
if request.GET and 'pdf' in request.GET and request.GET['pdf'] == 'true':
generate_pdf = True
kwargs = {
'enable': True,
'url': art_url,
@@ -85,10 +123,19 @@ def DocsView(request, version=None, art_url=None):
'allow_versions': versions,
'breadcrumbs': breadcrumbs,
'prev_article': art.get_prev_article(version=vers_obj),
'next_article': art.get_next_article(version=vers_obj)
'next_article': art.get_next_article(version=vers_obj),
'pdf_render': generate_pdf
}
t = loader.get_template('pages/p_documentation.html')
return get_inter_http_respose(t, Dict, request)
if not generate_pdf:
tpl = 'pages/p_documentation.html'
t = loader.get_template(tpl)
return get_inter_http_respose(t, Dict, request)
else:
tpl = 'blocks/b_documentation_article.html'
# tpl = 'pages/p_documentation.html'
return pdf_render(request, tpl, Dict, art.name)
except DocArt.DoesNotExist:
raise Http404