Python 通过for循环应用PDF水印

Python 通过for循环应用PDF水印,python,python-3.x,python-3.5,Python,Python 3.x,Python 3.5,我正在阅读《用Python自动化枯燥的东西》一书,并试图在所有页面上运行水印.pdf的代码,但水印只出现在第一页 所以问题要么在循环中,要么在写作中。有人能帮我弄清楚吗?多谢各位 在Windows7机器上运行Python 3.5.0 代码如下: import PyPDF2 minutesFile = open('meetingminutes.pdf', 'rb') pdfReader = PyPDF2.PdfFileReader(minutesFile) minutesFirstPage = p

我正在阅读《用Python自动化枯燥的东西》一书,并试图在所有页面上运行水印.pdf的代码,但水印只出现在第一页

所以问题要么在循环中,要么在写作中。有人能帮我弄清楚吗?多谢各位

在Windows7机器上运行Python 3.5.0

代码如下:

import PyPDF2
minutesFile = open('meetingminutes.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(minutesFile)
minutesFirstPage = pdfReader.getPage(0)
pdfWatermarkReader = PyPDF2.PdfFileReader(open('watermark.pdf', 'rb'))
minutesFirstPage.mergePage(pdfWatermarkReader.getPage(0))
pdfWriter = PyPDF2.PdfFileWriter()
pdfWriter.addPage(minutesFirstPage)

for pageNum in range(1, pdfReader.numPages):
       pageObj = pdfReader.getPage(pageNum)
       pdfWriter.addPage(pageObj)
resultPdfFile = open('watermarkedCover.pdf', 'wb')
pdfWriter.write(resultPdfFile)
minutesFile.close()
resultPdfFile.close()

事实上,水印只出现在第一页并不是一个bug,这正是这段代码的设计目的。我看不到有人试图修改代码,将水印添加到每个页面。诚实地对待现状以及你为改变现状所付出的努力,即使没有

下面是我重新编写的代码,用于为每个页面添加水印:

import PyPDF2

watermarkFile = open('watermark.pdf', 'rb')
pdfWatermarkReader = PyPDF2.PdfFileReader(watermarkFile)

minutesFile = open('meetingminutes.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(minutesFile)

pdfWriter = PyPDF2.PdfFileWriter()

for pageNum in range(pdfReader.numPages):
    pageObj = pdfReader.getPage(pageNum)
    pageObj.mergePage(pdfWatermarkReader.getPage(0))
    pdfWriter.addPage(pageObj)

resultPdfFile = open('watermarkedCover.pdf', 'wb')
pdfWriter.write(resultPdfFile)

watermarkFile.close()
minutesFile.close()
resultPdfFile.close()

尝试一下,看看它是否符合您的要求。

您应该在循环中移动水印合并。谢谢juzraai-我认为它实际上是在循环过程中添加的。我现在从你的评论和cdlane的评论中了解到,它只是在构建pdf,而不是添加水印。我只是从代码上看不清楚。谢谢嗨,cdlane,非常感谢你的帮助——同时也感谢你那超级尖刻的暗示,我没有投入任何努力来解决这个问题!事实上,我是python新手,正在努力学习。正如我所说,我直接从书中获取了这段代码。对我来说,它建议应该通过代码添加水印:现在我们已经调用了minutesFirstPage上的mergePage,minutesFirstPage表示带水印的第一页。我们制作一个PdfielWriter对象❺ 并添加带水印的第一页❻. 然后,我们在meetingminutes.pdf中循环浏览其余页面,并将它们添加到PdfFileWriter中object@PaulS我会把“超级NoLKY”当作我的新用户名。在阅读原始代码时,它显然只是在第一页添加了水印,并逐字复制了其余部分。我还通过运行它来确认这一点。你应该直截了当地回答你的问题,因为我看到有太多的问题在得到回答之前因为不够清晰而被关闭了。提供少量的解释来说明你的代码的目的和工作原理通常是有帮助的,而不是仅仅发布代码。如果你编辑了这篇文章并添加了一些解释,未来的用户将会受益匪浅。
import PyPDF2

template = PyPDF2.PdfFileReader(open('yourfilw.pdf', 'rb'))
watermark = PyPDF2.PdfFileReader(open('watermarkfile.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('water_marked.pdf', 'wb') as file:
    output.write(file)