Водяной знак на двух PDF-файлах - каждая страница первого с каждой страницей второго

У меня есть два файла PDF одинаковой длины, скажем, pdf1.pdf и pdf2.pdf. Я пытаюсь поставить водяной знак на каждую страницу pdf1.pdf с помощью pdf2.pdf (т. е. страницу 1 pdf1.pdf со страницей 1 pdf2.pdf, страницу 2 pdf1.pdf со страницей 2 pdf2.pdf...) .

Тем не менее, я действительно борюсь с тем, как их зациклить (я новичок в программировании).

Например, я пробовал это:

import PyPDF2
from PyPDF2 import PdfFileMerger
from PyPDF2 import PdfFileReader, PdfFileWriter

output = PdfFileWriter()

ipdf = PdfFileReader(open('pdf1.pdf', 'rb'))
wpdf = PdfFileReader(open('pdf2.pdf', 'rb'))
for i in xrange(wpdf.getNumPages()):
    watermark = wpdf.getPage(i)
    for i in xrange(ipdf.getNumPages()):
        page = ipdf.getPage(i)

for i in watermark:
    page.mergePage(watermark)
    output.addPage(page)

with open('newfile.pdf', 'wb') as f:
   output.write(f)

Любая помощь будет оценена :) :)


person Fabian    schedule 28.04.2018    source источник
comment
А, я использую Python версии 2.7.14 :)   -  person Fabian    schedule 28.04.2018


Ответы (1)


Вы используете слишком много циклов, количество страниц идентично, поэтому вы выполняете один цикл по количеству страниц, получаете водяной знак, получаете страницу, объединяете оба и добавляете их к выводу:

import PyPDF2
from PyPDF2 import PdfFileMerger
from PyPDF2 import PdfFileReader, PdfFileWriter

output = PdfFileWriter()

ipdf = PdfFileReader(open('pdf1.pdf', 'rb'))
wpdf = PdfFileReader(open('pdf2.pdf', 'rb'))

# same page counts - just loop once
for i in xrange(wpdf.getNumPages()):
    watermark = wpdf.getPage(i)    # get i-th watermark
    page = ipdf.getPage(i)         # get i-th page
    page.mergePage(watermark)      # marry them and add to output
    output.addPage(page)

with open('newfile.pdf', 'wb') as f:
   output.write(f)

Сделанный.

person Patrick Artner    schedule 28.04.2018
comment
Большое спасибо!!! Вы правы, поскольку у них одинаковое количество страниц, мне нужно получить количество страниц только один раз! :D - person Fabian; 28.04.2018
comment
@Fabian, пожалуйста, добавьте тег python2.7 к своему вопросу (отредактируйте его) в дополнение к общему тегу python. Если ваши проблемы решены, рассмотрите возможность проголосовать/принять добавление тега и предварительное оформление ваших вопросов поможет следующему Флориану через несколько недель в будущем, чтобы найти свой вопрос к его идентичной проблеме проще;) - счастливое кодирование - person Patrick Artner; 28.04.2018
comment
Спасибо за предложения! Я хотел бы добавить тег, однако я не могу (создание нового тега «python2.7» требует не менее 1500 репутации. Вместо этого попробуйте что-нибудь из существующего списка тегов.) Точно так же голосование невозможно (спасибо за отзыв! Голоса, отданные теми, у кого репутация менее 15, записываются, но не меняют публично отображаемый балл поста.), но принятие его, по крайней мере, сработало :) :) - person Fabian; 28.04.2018