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: