How to add watermark in all pages of PDF files with python?

Question:

I’m try to adding watermark to every pages of my PDF file.My PDF files have 58 pages but my output file has get only last page in my PDF file.

My PDF file have 59 pages.

This's my PDF Output files.

This’s my code:

from PyPDF2 import PdfFileReader, PdfFileWriter

watermark_pdf = PdfFileReader("watermark.pdf")
watermark_page = watermark_pdf.getPage(0)
reader = PdfFileReader("original_document.pdf")

for page in reader.pages:
    page.mergePage(watermark_page)
    output = PdfFileWriter()
    output.addPage(page)
    with open("watermarked_document.pdf", "wb") as fp:
        output.write(fp)

Please tell me how to add watermark all pages.

Asked By: vee

||

Answers:

You’re rewriting your “merged” file for each page.

Try something like

from PyPDF2 import PdfFileMerger, PdfFileReader, PdfFileWriter

pdf_file = "C:/Users/11359023/Desktop/deepfake_vee.pdf"
watermark = "C:/Users/11359023/Desktop/simple.pdf"
merged = "C:/Users/11359023/Desktop/merged.pdf"

with open(pdf_file, "rb") as input_file, open(watermark, "rb") as watermark_file:
    input_pdf = PdfFileReader(input_file)
    watermark_pdf = PdfFileReader(watermark_file)
    watermark_page = watermark_pdf.getPage(0)

    output = PdfFileWriter()

    for i in range(input_pdf.getNumPages()):
        pdf_page = input_pdf.getPage(i)
        pdf_page.mergePage(watermark_page)
        output.addPage(pdf_page)

    with open(merged, "wb") as merged_file:
        output.write(merged_file)

instead.

Answered By: AKX
import PyPDF2

template = PyPDF2.PdfFileReader(open('C:/Users/11359023/Desktop/deepfake_vee.pdf', 'rb'))
watermark = PyPDF2.PdfFileReader(open('C:/Users/11359023/Desktop/simple.pdf', 'rb'))
output = PyPDF2.PdfFileWriter()

for i in range(template.getNumPages()):
  page = template.getPage(i)
  page.mergePage(watermark.getPage(0))
  output.addPage(page)

  with open('C:/Users/11359023/Desktop/merged.pdf', 'wb') as file:
    output.write(file)
Answered By: Mykola Rudenko

My code is taking in multiple pdf files passed in as cmd promt arguments , merges them together to super.pdf and then adding watermark to each page in super.pdf after what saves it as watermarked.pdf

import PyPDF2
import sys

pdf_file_list = sys.argv[1:]
watermark = 'wtr.pdf'
merger = PyPDF2.PdfFileMerger()
writer = PyPDF2.PdfFileWriter()


for file in pdf_file_list:
    merger.append(file)

merger.write('super.pdf')


with open('super.pdf', 'rb') as fileinput:
    pdf_file = PyPDF2.PdfFileReader(fileinput)

    with open(watermark, 'rb') as filewatermark:
        watermark_pdf = PyPDF2.PdfFileReader(filewatermark)

        for page in range(pdf_file.getNumPages()):
            current_pdf_page = pdf_file.getPage(page)
            first_page_watermark = watermark_pdf.getPage(0)
            current_pdf_page.mergePage(first_page_watermark)
            writer.addPage(current_pdf_page)

            with open("watermarked.pdf", 'wb')as file_output:
                writer.write(file_output)
Answered By: Anton Mett

or you can use this if you have a folder containing many pdfs and wanna add the watermark to all of them and save them to new files
*assuming the file with watermark is named wtr.pdf containing the watermark on the first page:

import PyPDF2
import pathlib

path = 'D:PythonPDF processing' #add your folder path here
folder = pathlib.Path(path).resolve()

for item in folder.iterdir():
    if item.is_file() and item.suffix == '.pdf' and not item.name == 'wtr.pdf':
        with open(f'{item}', 'rb') as file, open('wtr.pdf', 'rb') as wtr:
            input_file_reader = PyPDF2.PdfFileReader(file)  # input file reader
            wtr_reader = PyPDF2.PdfFileReader(wtr)  # watermark reader
            wtr_page = wtr_reader.getPage(0)  # getting the page with the watermark
            output = PyPDF2.PdfFileWriter()  # the output writer

            for i in range(input_file_reader.numPages):  # looping the input reader pages
                page = input_file_reader.getPage(i) # getting pages one by one
                page.mergePage(wtr_page)  # merging each page with the watermark
                output.addPage(page)  # adding the merged page to the output writer

            with open(f'merged_{item.name}', 'wb') as merged_file:
                output.write(merged_file)  # saving to a file from the output writer
Answered By: Zico

I copied this code to watermark a pdf file, I followed all the steps that u mentioned, but when I do it and create the output file, the text in the input file is not visible and only watermark is visible, but when I extract the content of the output file all the text and watermark content is printed in terminal.Can u please guide me with this.

Answered By: Adarsh Jatti
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.