scripts/pdf_watermark.py
scripts/pdf_watermark.pyBrowse 21 files
427 tokens
1,852 bytes
Token encoding: o200k_base
Snapshot 24fd22b
← Back to SKILL.md
1#!/usr/bin/env python32"""Stamp/watermark every page of a PDF with page 1 of another PDF."""3from __future__ import annotations4 5import argparse6import json7import sys8 9 10def main() -> int:11 for stream in (sys.stdout, sys.stderr):12 try:13 stream.reconfigure(encoding="utf-8")14 except Exception:15 pass16 parser = argparse.ArgumentParser(17 description="Overlay (stamp) or underlay (watermark) a one-page PDF onto every page.")18 parser.add_argument("pdf", help="Input PDF path")19 parser.add_argument("--stamp", required=True, help="One-page PDF to apply (page 1 is used)")20 parser.add_argument("-o", "--output", required=True, help="Output PDF path")21 parser.add_argument("--under", action="store_true",22 help="Place stamp under the page content (background watermark)")23 parser.add_argument("--password", help="Password if the input is encrypted")24 args = parser.parse_args()25 26 try:27 from pypdf import PdfReader, PdfWriter28 except ImportError:29 print("Missing dependency: install with 'python3 -m pip install pypdf'", file=sys.stderr)30 return 231 32 reader = PdfReader(args.pdf)33 if reader.is_encrypted:34 if args.password is None or not reader.decrypt(args.password):35 print("Error: input is encrypted; pass --password", file=sys.stderr)36 return 337 stamp_page = PdfReader(args.stamp).pages[0]38 39 writer = PdfWriter()40 writer.append(reader)41 for page in writer.pages:42 page.merge_page(stamp_page, over=not args.under)43 with open(args.output, "wb") as fh:44 writer.write(fh)45 print(json.dumps({"output": args.output, "page_count": len(writer.pages),46 "mode": "under" if args.under else "over"}))47 return 048 49 50if __name__ == "__main__":51 sys.exit(main())52