Adding a Stamp/Watermark to a PDF
Adding stamps or watermarks are two common ways to manipulate PDF files. A stamp is adding something on top of the document, a watermark is in the background of the document.
Stamp (Overlay) / Watermark (Underlay)
The process of stamping and watermarking is the same, you just need to set
over parameter to
True for stamping and
False for watermarking.
You can use
merge_page() if you don’t need to transform the stamp:
from pypdf import PdfWriter, PdfReader stamp = PdfReader("bg.pdf").pages writer = PdfWriter(clone_from="source.pdf") for page in writer.pages: page.merge_page(stamp, over=False) # here set to False for watermarking writer.write("out.pdf")
Transformation() if you need to translate, rotate, scale, etc. the stamp before merging it to the content page.
from pathlib import Path from typing import Union, Literal, List from pypdf import PdfWriter, PdfReader def stamp( content_pdf: Path, stamp_pdf: Path, pdf_result: Path, page_indices: Union[Literal["ALL"], List[int]] = "ALL", ): stamp_page = PdfReader(stamp_pdf).pages writer = PdfWriter() # page_indices can be a List(array) of page, tuples are for range definition writer.append(content, pages=None if page_indices == "ALL" else page_indices) for content_page in writer.pages: content_page.merge_transformed_page( stamp_page, Transformation().scale(0.5), ) writer.write(pdf_result)
If you are experiencing wrongly rotated watermarks/stamps, try to use
transfer_rotation_to_content() on the corresponding pages beforehand to fix the page boxes.
Example of stamp:
Example of watermark: