首页 > 解决方案 > 为什么在尝试使用 PyPDF2 进行“水印”时,此代码不能按“预期”工作?

问题描述

我正在合并 PDF 页面(水印样式),以便在原始基本 pdf 大纲中填充来自另一个 pdf 的文本。

基本 pdf 是一个提供标题的页面。文本 pdf 是一个两页的 pdf,第 1 页有文本,第 2 页有文本。

我正在尝试生成一个两页 pdf 输出,该输出在每页上都有基本标题,并且在原始文本 pdf 的每一页中都有相应的文本。

但是,在实现以下代码时,结果是一个两页的 pdf,每页都有标题,但结果 pdf 的两页中的每一页都有两页文本。

# file1 # Pdf file - text of two pages
# file2 # Pdf file - base header of one page
# fileO # Output file

from PyPDF2 import PdfFileWriter, PdfFileReader

textpdf = PdfFileReader(open(file1,'rb')) # Reads the text PDF into PyPDF2
basepdf = PdfFileReader(open(file2,'rb')) # Reads the base PDF into PyPDF2
output = PdfFileWriter() # Creates the ouput object in PyPDF2
num_pages = textpdf.getNumPages() # The number of pages in the text file

for page in range(num_pages):
    basepdf_page = basepdf.getPage(0)
    basepdf_page.mergePage(textpdf.getPage(page))
    output.addPage(basepdf_page)    

outputpdf = open(fileO,'wb')
output.write(outputpdf)
outputpdf.close()

我试过放置这行代码:

basepdf_page = basepdf.getPage(0)

在 for 循环之上,但这不会改变任何东西。

我也尝试过将基本头文件写入文本文件的每一页的“另一种方式”的方法,但问题是基本头文件的空白基本上会覆盖文本。这样,至少文本会覆盖基本头文件的空白。

如果需要更多信息,请告诉我。同时,我将继续寻找解决方案!

谢谢!


更新:如果我每次刷新 basepdf 对象,通过将实例化该对象的代码移动到 for 循环中,那么它按预期工作,所以我已经解决了这个问题,但我仍然想了解它为什么不能作为第一次“期待”!

from PyPDF2 import PdfFileWriter, PdfFileReader

textpdf = PdfFileReader(open(file1,'rb')) # Reads the text PDF into PyPDF2
num_pages = textpdf.getNumPages() # The number of pages in the text file

output = PdfFileWriter() # Creates the ouput object in PyPDF2

for page in range(num_pages):
    basepdf = PdfFileReader(open(file2,'rb')) # Reads the base PDF into PyPDF2
    basepdf_page = basepdf.getPage(0)
    basepdf_page.mergePage(textpdf.getPage(page))
    output.addPage(basepdf_page)

outputpdf = open(fileO,'wb')
output.write(outputpdf)
outputpdf.close()

谢谢!

标签: python-3.xpypdf2

解决方案


推荐阅读