Skip to content
Snippets Groups Projects
Commit 4c1952d7 authored by magicfelix's avatar magicfelix
Browse files

Fix PDF rendering by using Firefox instead of Chromium

parent 9d32afb3
No related branches found
No related tags found
1 merge request!1706Resolve "Chromium crash while rendering pdf"
...@@ -30,8 +30,6 @@ RUN apt-get -y update && \ ...@@ -30,8 +30,6 @@ RUN apt-get -y update && \
eatmydata apt-get -y upgrade && \ eatmydata apt-get -y upgrade && \
eatmydata apt-get install -y --no-install-recommends \ eatmydata apt-get install -y --no-install-recommends \
build-essential \ build-essential \
chromium \
chromium-driver \
curl \ curl \
dumb-init \ dumb-init \
gettext \ gettext \
......
...@@ -28,34 +28,32 @@ from aleksis.core.util.celery_progress import recorded_task, render_progress_pag ...@@ -28,34 +28,32 @@ from aleksis.core.util.celery_progress import recorded_task, render_progress_pag
from aleksis.core.util.core_helpers import has_person, process_custom_context_processors from aleksis.core.util.core_helpers import has_person, process_custom_context_processors
def _generate_pdf_with_chromium(temp_dir, pdf_path, html_url, lang): def _generate_pdf_with_webdriver(temp_dir, pdf_path, html_url, lang):
"""Generate a PDF file from a HTML file.""" """Generate a PDF file from a HTML file."""
chrome_options = webdriver.ChromeOptions() driver_options = webdriver.FirefoxOptions()
chrome_options.add_argument("--kiosk-printing") driver_options.add_argument("--kiosk-printing")
chrome_options.add_argument("--headless") driver_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox") driver_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-gpu") driver_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-dev-shm-usage") driver_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-setuid-sandbox") driver_options.add_argument("--disable-setuid-sandbox")
chrome_options.add_argument("--dbus-stub") driver_options.add_argument("--dbus-stub")
chrome_options.add_argument("--temp-profile") driver_options.add_argument("--temp-profile")
chrome_options.add_argument(f"--lang={lang}") driver_options.add_argument(f"--lang={lang}")
driver = webdriver.Chrome(options=chrome_options) driver = webdriver.Firefox(options=driver_options)
driver.get(html_url) driver.get(html_url)
pdf = driver.execute_cdp_cmd( pdf = driver.print_page()
"Page.printToPDF", {"printBackground": True, "preferCSSPageSize": True}
)
driver.close() driver.close()
with open(pdf_path, "wb") as f: with open(pdf_path, "wb") as f:
f.write(base64.b64decode(pdf["data"])) f.write(base64.b64decode(pdf))
@recorded_task @recorded_task
def generate_pdf( def generate_pdf(
file_pk: int, html_url: str, recorder: ProgressRecorder, lang: Optional[str] = None file_pk: int, html_url: str, recorder: ProgressRecorder, lang: Optional[str] = None
): ):
"""Generate a PDF file by rendering the HTML code using a headless Chromium.""" """Generate a PDF file by rendering the HTML code using a headless Firefox."""
file_object = get_object_or_404(PDFFile, pk=file_pk) file_object = get_object_or_404(PDFFile, pk=file_pk)
recorder.set_progress(0, 1) recorder.set_progress(0, 1)
...@@ -65,7 +63,7 @@ def generate_pdf( ...@@ -65,7 +63,7 @@ def generate_pdf(
pdf_path = os.path.join(temp_dir, "print.pdf") pdf_path = os.path.join(temp_dir, "print.pdf")
lang = lang or get_language() lang = lang or get_language()
_generate_pdf_with_chromium(temp_dir, pdf_path, html_url, lang) _generate_pdf_with_webdriver(temp_dir, pdf_path, html_url, lang)
# Upload PDF file to media storage # Upload PDF file to media storage
with open(pdf_path, "rb") as f: with open(pdf_path, "rb") as f:
......
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