From 5c83dab8a761057730f3f06514fa8f92ce1e2e2d Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Tue, 10 Feb 2026 14:12:49 -0800 Subject: [PATCH] Fix fpdf text mode in multi-page renderer; add v17.2.0 release notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous fix (e62e73e4) only corrected text_rendering_mode → text_mode in the single-page Fpdf2PdfRenderer, but the main OCR pipeline uses Fpdf2MultiPageRenderer which still had the old attribute name. Since fpdf2 has no text_rendering_mode property, setting it silently created a no-op attribute while text_mode stayed at FILL — so 3 Tr (invisible text) was never emitted. Fixes #1631, #1632 --- docs/release_notes.md | 12 ++++++++++++ src/ocrmypdf/fpdf_renderer/renderer.py | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index df228266..65089105 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -26,6 +26,18 @@ official when it's tagged and posted to PyPI. ::: +## v17.2.0 + +- Fixed OCR text layer being visible instead of invisible due to incorrect fpdf2 + text rendering mode attribute. This caused OCR text to appear when images were + removed from the PDF. {issue}`1631` +- Fixed OCR text layer misalignment with non-zero mediabox origins, which + affected cropped PDFs and JSTOR PDFs generated by iText. The ``--redo-ocr`` + mode would shift text vertically on these files. {issue}`1630` +- Fixed Ghostscript rasterization failure with very low DPI values (below 10). + OCRmyPDF now renders at a minimum of 10 DPI and resizes the output to match + the originally requested dimensions. {issue}`1612` + ## v17.1.0 - Added `--tagged-pdf-mode` to allow skipping the TaggedPDF error message, if desired. diff --git a/src/ocrmypdf/fpdf_renderer/renderer.py b/src/ocrmypdf/fpdf_renderer/renderer.py index 24b97d8c..8ea57fcb 100644 --- a/src/ocrmypdf/fpdf_renderer/renderer.py +++ b/src/ocrmypdf/fpdf_renderer/renderer.py @@ -802,9 +802,9 @@ class Fpdf2MultiPageRenderer: # Set text mode for invisible text if self.invisible_text: - pdf.text_rendering_mode = TextMode.INVISIBLE + pdf.text_mode = TextMode.INVISIBLE else: - pdf.text_rendering_mode = TextMode.FILL + pdf.text_mode = TextMode.FILL # Shared font registration across all pages shared_registered_fonts: dict[str, str] = {}