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
Branches
Tags
1 merge request!1706Resolve "Chromium crash while rendering pdf"
......@@ -30,8 +30,6 @@ RUN apt-get -y update && \
eatmydata apt-get -y upgrade && \
eatmydata apt-get install -y --no-install-recommends \
build-essential \
chromium \
chromium-driver \
curl \
dumb-init \
gettext \
......
......@@ -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
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."""
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--kiosk-printing")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-setuid-sandbox")
chrome_options.add_argument("--dbus-stub")
chrome_options.add_argument("--temp-profile")
chrome_options.add_argument(f"--lang={lang}")
driver = webdriver.Chrome(options=chrome_options)
driver_options = webdriver.FirefoxOptions()
driver_options.add_argument("--kiosk-printing")
driver_options.add_argument("--headless")
driver_options.add_argument("--no-sandbox")
driver_options.add_argument("--disable-gpu")
driver_options.add_argument("--disable-dev-shm-usage")
driver_options.add_argument("--disable-setuid-sandbox")
driver_options.add_argument("--dbus-stub")
driver_options.add_argument("--temp-profile")
driver_options.add_argument(f"--lang={lang}")
driver = webdriver.Firefox(options=driver_options)
driver.get(html_url)
pdf = driver.execute_cdp_cmd(
"Page.printToPDF", {"printBackground": True, "preferCSSPageSize": True}
)
pdf = driver.print_page()
driver.close()
with open(pdf_path, "wb") as f:
f.write(base64.b64decode(pdf["data"]))
f.write(base64.b64decode(pdf))
@recorded_task
def generate_pdf(
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)
recorder.set_progress(0, 1)
......@@ -65,7 +63,7 @@ def generate_pdf(
pdf_path = os.path.join(temp_dir, "print.pdf")
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
with open(pdf_path, "rb") as f:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment