feat: add parameters language and letter_head to download_pdf

This commit is contained in:
barredterra 2022-12-14 13:59:46 +01:00
parent 090f55957e
commit 67ede5d533
2 changed files with 42 additions and 3 deletions

View file

@ -14,6 +14,7 @@ import json
import operator
import os
import re
from contextlib import contextmanager
from csv import reader
from babel.messages.extract import extract_python
@ -1313,6 +1314,37 @@ def get_translated_doctypes():
return unique(dts + custom_dts)
@contextmanager
def print_language(language: str):
"""Ensure correct globals for printing in a specific language.
Usage:
```
with print_language("de"):
html = frappe.get_print( ... )
```
"""
if not language or language == frappe.local.lang:
# do nothing
yield
return
# remember original values
_lang = frappe.local.lang
_jenv = frappe.local.jenv
# set language, empty any existing lang_full_dict and jenv
frappe.local.lang = language
frappe.local.jenv = None
yield
# restore original values
frappe.local.lang = _lang
frappe.local.jenv = _jenv
# Backward compatibility
get_full_dict = get_all_translations
load_lang = get_translations_from_apps

View file

@ -5,6 +5,7 @@ from PyPDF2 import PdfWriter
import frappe
from frappe import _
from frappe.core.doctype.access_log.access_log import make_access_log
from frappe.translate import print_language
from frappe.utils.pdf import get_pdf
no_cache = 1
@ -118,15 +119,21 @@ def read_multi_pdf(output):
@frappe.whitelist(allow_guest=True)
def download_pdf(doctype, name, format=None, doc=None, no_letterhead=0):
def download_pdf(
doctype, name, format=None, doc=None, no_letterhead=0, language=None, letter_head=None
):
doc = doc or frappe.get_doc(doctype, name)
validate_print_permission(doc)
html = frappe.get_print(doctype, name, format, doc=doc, no_letterhead=no_letterhead)
with print_language(language):
pdf_file = frappe.get_print(
doctype, name, format, doc=doc, as_pdf=True, letterhead=letter_head, no_letterhead=no_letterhead
)
frappe.local.response.filename = "{name}.pdf".format(
name=name.replace(" ", "-").replace("/", "-")
)
frappe.local.response.filecontent = get_pdf(html)
frappe.local.response.filecontent = pdf_file
frappe.local.response.type = "pdf"