#!/usr/bin/env python3 from pathlib import Path import fitz BASE_DIR = Path(__file__).resolve().parents[1] INPUT = BASE_DIR / "input" / "okular_test.pdf" OUTPUT = BASE_DIR / "output" / "okular_test_updated.pdf" OLD_TEXT = "TITLE TEXT HERE" NEW_TEXT = "UPDATED TITLE TEXT\nLINE 2 UPDATED\nLINE 3 UPDATED" doc = fitz.open(INPUT) changed = 0 for page in doc: for annot in page.annots() or []: info = annot.info or {} content = info.get("content", "") if OLD_TEXT in content: info["content"] = NEW_TEXT annot.set_info(info) # FreeText annotations need appearance regenerated if annot.type[1] == "FreeText": annot.update() changed += 1 doc.save(OUTPUT, garbage=4, deflate=True) doc.close() print(f"Updated {changed} annotation(s)") print(f"Wrote {OUTPUT}")