PyPDF2 复制后返回空白 PDF

2024-05-26

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 Automate the Boring Stuff 部分。我在复制 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 需要可用并打开,否则它无法访问页面来写入新文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyPDF2 复制后返回空白 PDF 的相关文章

随机推荐

  • 正则表达式删除带有数字的单词

    我想删除产品名称中带有数字 参考 或小单词 2 个或更少字符 的单词 但我找不到好的正则表达式 一些例子 链式防回弹ECS 2035 应成为 链式防反弹 指南 35 厘米俄勒冈 Intenz 应该成为 俄勒冈州 Intenz 指南 Tron
  • git apply 不对文件进行任何更改

    我必须对我的存储库应用补丁并正在运行 git apply directory PWD xxxxx patch 由于我不会详细讨论的原因 我无法使用git am在这种情况下 我需要使用目录标志 吉特告诉我 gt git apply direc
  • TypeError:无法在 re.findall() 中的类似字节的对象上使用字符串模式

    我正在尝试学习如何自动从页面获取网址 在下面的代码中 我试图获取网页的标题 import urllib request import re url http www google com regex r pattern re compile
  • 在 DO 块内使用 psql 元命令设置的变量

    这是我想做的 set values foo bar baz DO DECLARE value TEXT values TEXT string to array values BEGIN FOREACH value IN ARRAY valu
  • 解析dev/input/event触摸事件

    我能够在 Android 手机上从 dev input event 读取事件 然而 它们是按一定顺序排列的行代码 就像触摸事件给出的那样 3 53 216 3 54 444 3 48 40 3 50 5 0 2 0 0 0 0 如何将它们解
  • 绑定Xaml位图图像

    我有位图图像变量 我想将其绑定到我的 xaml 窗口 System Reflection Assembly thisExe thisExe System Reflection Assembly GetExecutingAssembly st
  • 如何在 Html.BeginForm 中使用 @FileUpload.Get Html 并提交文件列表

    FileUpload GetHtml 有一个默认的提交按钮 但我希望在 Html 开始表单中有一个提交按钮 并使用该替换来提交带有更多参数的文件列表 但是 当我这样做时 在 Action 方法中传递的 IEnumerable 始终为 nul
  • 如何在 Makefile 中定义全局 shell 函数?

    我想定义一个shell函数 bin sh test do some complicated tests 1 2 if something then build thisway 1 2 else build otherway 1 2 fi 这
  • 如何使用 Eclipse 从我的设备检索我的应用程序的沙箱?

    我有一个 Android 应用程序 它使用共享首选项 我使用 Eclipse 在 Android 设备中运行该应用程序 我想拉整个sandbox来自设备到桌面这样我就可以手动查看sharedPreferences的内容 我点击了DDMS并点
  • 从关系数据库中“区分”对象

    我们的 win32 应用程序根据 MySQL 关系数据库中多个表中的数据组装对象 对于这样的对象 多个修订版本存储在数据库中 当存储某些内容的多个修订版本时 迟早您会问自己这样的问题 您是否可以想象两个修订版本之间的差异 所以我的问题是 比
  • Akka/Scala:映射 Future 与 pipelineTo

    In Akka参与者 在发送一个Future结果给另一个演员 A 映射Future发挥作用tell结果给演员 B 定义一个onSuccess未来的回调 其中tell结果给演员 C 管道Future结果给演员pipeTo 其中一些选项已在上一
  • 在Container上手动触发Pull刷新

    如果我想在加载表单后手动触发 Codename One 中的容器上的 拉取刷新 如果有人有任何想法 请告知 很简单 技巧就是使用showListener 假设这是起始代码 取自 Codename One 开发人员指南 拉动刷新 部分 htt
  • 计算唯一值的数量

    如果我有三列 orderNumber name email 我想计算表中有多少个唯一的电子邮件 我该怎么做 像这样的声明 SELECT count email FROM orders 给我总数 I tried SELECT DISTINCT
  • 如何将背景音乐添加到我的 spritekit 文件中

    有人可以给我一个快速简单的步骤 以便在我的应用程序加载后添加背景 m4a 音乐 它是一个精灵套件Xcode文件 音乐是m4a格式 谢谢 尝试用这个 import AVFoundation AVAudioPlayer backgroundMu
  • 如何将 NSDictionary 转换为 NSData,反之亦然?

    我正在发送NSString and UIImage使用蓝牙 我决定将两者都存储在NSDictionary然后将字典转换为NSData 我的问题是如何转换NSDictionary to NSData反之亦然 NSDictionary gt N
  • 为什么 Xcode 会为选择器列出自动完成方法?

    自从我升级到最新的 Xcode 以来 自动完成功能就列出了 删除线 方法selector目的 我无法判断这是 Xcode 的错误还是有一些我不知道的新语法更改 如果你把它插入你的 Playground 并删除里面的方法 selector t
  • 从 XElement 中删除属性

    请考虑这个 XElement
  • 如何在 R 中创建没有情节的图例?

    这是一个艺术项目 我创建了一个包含 5 种不同颜色的许多点的散点图 我想创建一个与绘图完全分开的图例 因为它不在绘图上 也不在绘图旁边 而是在它自己的窗口中 因此我可以将图例保存为它自己的 pdf 文件 这样我就可以将我的情节和图例分开打印
  • 我应该如何管理 MVC Core 中的 DbContext 生命周期?

    来自文档 https learn microsoft com en us aspnet core fundamentals dependency injection 实体框架上下文should添加到服务容器中 使用Scoped寿命 如果您这
  • PyPDF2 复制后返回空白 PDF

    def EncryptPDFFiles password directory pdfFiles success 0 Get all PDF files from a directory for folderName subFolders f