Pdf Remove Watermark Github Online
# Most watermarks are at same coordinates across pages common_rect = fitz.Rect() if watermarks: common_rect = watermarks[0] # simplify: take first
# Step 1: Generate a mask where watermark exists (manual ROI) convert input.pdf[0] -threshold 50% mask.png for i in $(seq 0 $(pdfinfo input.pdf | grep Pages | awk 'print $2')); do convert input.pdf[$i] mask.png -compose dst_out -composite page_$i.pdf done Step 3: Rebuild PDF and OCR pdfunite page_*.pdf no_watermark.pdf ocrmypdf no_watermark.pdf final_clean.pdf --deskew --clean pdf remove watermark github
This assumes watermark is in same bounding box. Real watermarks rotate, semi-transparent, or appear per-page differently. 4. Advanced: Remove by Redaction (Forensic Clean) import fitz def redact_watermark(input_pdf, output_pdf, search_text="Confidential"): doc = fitz.open(input_pdf) for page in doc: text_instances = page.search_for(search_text) for inst in text_instances: page.add_redact_annot(inst, fill=(1,1,1)) page.apply_redactions() doc.save(output_pdf) # Most watermarks are at same coordinates across
No single tool works universally. The deep approach: 3. Deep Dive: PyMuPDF Script (Most Effective) import fitz # PyMuPDF def remove_watermark_by_rect(input_pdf, output_pdf, rect_tolerance=0.1): """ Remove all vector/text elements inside specified rectangular regions. rect_tolerance: match watermark position across pages (fraction of page) """ doc = fitz.open(input_pdf) Advanced: Remove by Redaction (Forensic Clean) import fitz
This physically removes the text—even from copied text layer. Image watermarks (scan of a stamp, logo) require a different approach: