diff --git a/Dockerfile b/Dockerfile index 38dec3ced173a8329f8e7e57e25d34351021f844..11475ede4442555e56ff1636b59940d87c4abf72 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 \ diff --git a/aleksis/core/util/pdf.py b/aleksis/core/util/pdf.py index 1a606220150870444d8da8cee0dd0ad574173068..21fe87b4839a8101f87ad9fce0e26bfae0774559 100644 --- a/aleksis/core/util/pdf.py +++ b/aleksis/core/util/pdf.py @@ -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: