seitime-frappe/frappe/utils/pdf.py
2015-07-02 14:23:37 +05:30

44 lines
1.1 KiB
Python

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
from __future__ import unicode_literals
import pdfkit, os, frappe
from frappe.utils import scrub_urls
from frappe import _
def get_pdf(html, options=None):
if not options:
options = {}
options.update({
"print-media-type": None,
"background": None,
"images": None,
'margin-top': '15mm',
'margin-right': '15mm',
'margin-bottom': '15mm',
'margin-left': '15mm',
'encoding': "UTF-8",
'quiet': None,
'no-outline': None
})
if not options.get("page-size"):
options['page-size'] = frappe.db.get_single_value("Print Settings", "pdf_page_size") or "A4"
html = scrub_urls(html)
fname = os.path.join("/tmp", frappe.generate_hash() + ".pdf")
try:
pdfkit.from_string(html, fname, options=options or {})
except IOError, e:
if "ContentNotFoundError" in e.message:
frappe.throw(_("PDF generation failed because of broken image links"))
else:
raise
with open(fname, "rb") as fileobj:
filedata = fileobj.read()
os.remove(fname)
return filedata