39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import textwrap
|
|
|
|
from django.templatetags.static import static
|
|
from django.utils.html import format_html
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from orchestra.utils.sys import run
|
|
|
|
|
|
def html_to_pdf(html, pagination=False):
|
|
""" converts HTL to PDF using wkhtmltopdf """
|
|
context = {
|
|
'pagination': textwrap.dedent("""\
|
|
--footer-center "Page [page] of [topage]" \\
|
|
--footer-font-name sans \\
|
|
--footer-font-size 7 \\
|
|
--footer-spacing 7"""
|
|
) if pagination else '',
|
|
}
|
|
cmd = textwrap.dedent("""\
|
|
PATH=$PATH:/usr/local/bin/
|
|
xvfb-run -a -s "-screen 0 2480x3508x16" wkhtmltopdf -q \\
|
|
--enable-local-file-access \\
|
|
--use-xserver \\
|
|
%(pagination)s \\
|
|
--margin-bottom 22 \\
|
|
--margin-top 20 - - \
|
|
""") % context
|
|
return run(cmd, stdin=html.encode('utf-8')).stdout
|
|
|
|
|
|
def get_on_site_link(url):
|
|
context = {
|
|
'title': _("View on site %s") % url,
|
|
'url': url,
|
|
'image': format_html('<img src="{}"></img>', static('orchestra/images/view-on-site.png')),
|
|
}
|
|
return format_html('<a href="{url}" title="{title}">{image}</a>', **context)
|