PyPDF2 复制后返回空白 PDF
PyPDF2 returning blank PDF after copy
def EncryptPDFFiles(password, directory):
pdfFiles = []
success = 0
# Get all PDF files from a directory
for folderName, subFolders, fileNames in os.walk(directory):
for fileName in fileNames:
if (fileName.endswith(".pdf")):
pdfFiles.append(os.path.join(folderName, fileName))
print("%s PDF documents found." % str(len(pdfFiles)))
# Create an encrypted version for each document
for pdf in pdfFiles:
# Copy old PDF into a new PDF object
pdfFile = open(pdf,"rb")
pdfReader = PyPDF2.PdfFileReader(pdfFile)
pdfWriter = PyPDF2.PdfFileWriter()
for pageNum in range(pdfReader.numPages):
pdfWriter.addPage(pdfReader.getPage(pageNum))
pdfFile.close()
# Encrypt the new PDF and save it
saveName = pdf.replace(".pdf",ENCRYPTION_TAG)
pdfWriter.encrypt(password)
newFile = open(saveName, "wb")
pdfWriter.write(newFile)
newFile.close()
print("%s saved to: %s" % (pdf, saveName))
# Verify the the encrypted PDF encrypted properly
encryptedPdfFile = open(saveName,"rb")
encryptedPdfReader = PyPDF2.PdfFileReader(encryptedPdfFile)
canDecrypt = encryptedPdfReader.decrypt(password)
encryptedPdfFile.close()
if (canDecrypt):
print("%s successfully encrypted." % (pdf))
send2trash.send2trash(pdf)
success += 1
print("%s of %s successfully encrypted." % (str(success),str(len(pdfFiles))))
我正在跟随 Pythons 自动化无聊的东西部分。在复制 PDF 文档时,我遇到过一些问题,但截至目前,每次我 运行 程序时,我复制的 PDF 都是空白页。我新加密的 PDF 有正确数量的页面,但它们都是空白的(页面上没有内容)。我以前发生过这种情况,但无法重现。我试过在关闭文件之前先睡一觉。我不确定 Python 中打开和关闭文件的最佳做法是什么。作为参考,我使用 Python3.
尝试将 pdfFile.close 移动到 for 循环的最后。
for pdf in pdfFiles:
#
# {stuff}
#
if (canDecrypt):
print("%s successfully encrypted." % (pdf))
send2trash.send2trash(pdf)
success += 1
pdfFile.close()
想法是pdfWriter最终写出时pdfFile需要可用并打开,否则无法访问页面写入新文件。
即使在使用 writer.addPage(your_page_name)
将页面添加到您的 pdf 之后,仍然出现空白页面的问题是上下文管理器。
您必须确保没有关闭正在阅读页面的 pdf。
例如:
with open(str(_pdf), "rb") as in_f:
reader = PdfFileReader(in_f)
_page = reader.getPage(0)
writer = PdfFileWriter()
writer.addPage(_page)
with open(_filename, "wb+") as out_f:
writer.write(out_f)
这将不起作用,因为上下文管理器正在关闭文件句柄。该文件必须是打开的,所以我们必须缩进它。像下面这样:
with open(str(_pdf), "rb") as in_f:
reader = PdfFileReader(in_f)
_page = reader.getPage(0)
writer = PdfFileWriter()
writer.addPage(_page)
with open(_filename, "wb+") as out_f:
writer.write(out_f)
我知道这没什么大不了的,但这确实让我拔了头发,缩进浪费了我的 6 个小时。这就是为什么我认为我应该为其他人写一个答案
def EncryptPDFFiles(password, directory):
pdfFiles = []
success = 0
# Get all PDF files from a directory
for folderName, subFolders, fileNames in os.walk(directory):
for fileName in fileNames:
if (fileName.endswith(".pdf")):
pdfFiles.append(os.path.join(folderName, fileName))
print("%s PDF documents found." % str(len(pdfFiles)))
# Create an encrypted version for each document
for pdf in pdfFiles:
# Copy old PDF into a new PDF object
pdfFile = open(pdf,"rb")
pdfReader = PyPDF2.PdfFileReader(pdfFile)
pdfWriter = PyPDF2.PdfFileWriter()
for pageNum in range(pdfReader.numPages):
pdfWriter.addPage(pdfReader.getPage(pageNum))
pdfFile.close()
# Encrypt the new PDF and save it
saveName = pdf.replace(".pdf",ENCRYPTION_TAG)
pdfWriter.encrypt(password)
newFile = open(saveName, "wb")
pdfWriter.write(newFile)
newFile.close()
print("%s saved to: %s" % (pdf, saveName))
# Verify the the encrypted PDF encrypted properly
encryptedPdfFile = open(saveName,"rb")
encryptedPdfReader = PyPDF2.PdfFileReader(encryptedPdfFile)
canDecrypt = encryptedPdfReader.decrypt(password)
encryptedPdfFile.close()
if (canDecrypt):
print("%s successfully encrypted." % (pdf))
send2trash.send2trash(pdf)
success += 1
print("%s of %s successfully encrypted." % (str(success),str(len(pdfFiles))))
我正在跟随 Pythons 自动化无聊的东西部分。在复制 PDF 文档时,我遇到过一些问题,但截至目前,每次我 运行 程序时,我复制的 PDF 都是空白页。我新加密的 PDF 有正确数量的页面,但它们都是空白的(页面上没有内容)。我以前发生过这种情况,但无法重现。我试过在关闭文件之前先睡一觉。我不确定 Python 中打开和关闭文件的最佳做法是什么。作为参考,我使用 Python3.
尝试将 pdfFile.close 移动到 for 循环的最后。
for pdf in pdfFiles:
#
# {stuff}
#
if (canDecrypt):
print("%s successfully encrypted." % (pdf))
send2trash.send2trash(pdf)
success += 1
pdfFile.close()
想法是pdfWriter最终写出时pdfFile需要可用并打开,否则无法访问页面写入新文件。
即使在使用 writer.addPage(your_page_name)
将页面添加到您的 pdf 之后,仍然出现空白页面的问题是上下文管理器。
您必须确保没有关闭正在阅读页面的 pdf。
例如:
with open(str(_pdf), "rb") as in_f:
reader = PdfFileReader(in_f)
_page = reader.getPage(0)
writer = PdfFileWriter()
writer.addPage(_page)
with open(_filename, "wb+") as out_f:
writer.write(out_f)
这将不起作用,因为上下文管理器正在关闭文件句柄。该文件必须是打开的,所以我们必须缩进它。像下面这样:
with open(str(_pdf), "rb") as in_f:
reader = PdfFileReader(in_f)
_page = reader.getPage(0)
writer = PdfFileWriter()
writer.addPage(_page)
with open(_filename, "wb+") as out_f:
writer.write(out_f)
我知道这没什么大不了的,但这确实让我拔了头发,缩进浪费了我的 6 个小时。这就是为什么我认为我应该为其他人写一个答案