• PyPDF2模块


    PDF介绍

    • 在学习和工作中大家一定对pdf非常熟悉。事实上,pdf也是非常重要并且应用广泛的一种数字媒体。PDF全称是Portable Document Format,即可移植的文档格式。它使用.pdf作为扩展名。用于可靠的呈现和交换文档,与软件,硬件和操作系统无关。
    • pdf使用Adobe公司开发,现在由国际标准化组织ISO进行维护。

    环境安装

    • Python处理PDF

      • 用于处理 PDF 的模块是 PyPDF2。
      • 要安装它,就从命令行运行 pip install PyPDF2
        • 这个模块名称是区分大小写的,所以要确保 y 是小写,其他字母都是大写
    • PyPDF2可以实现:

      • 提取文档信息(标题,作者,...)
      • 按页拆分文档
      • 逐页合并文档
      • 裁剪页面
      • 合并多个页面到一个页
      • 对pdf文档进行加密解密
      • ......

    读取PDF文件操作

    • 注意:
      • 虽然PDF文件非常适合以一种便于打印和阅读的方式显示文本,但是对于程序来说,将其解析为纯文本并不容易。因此,PyPDF2在从PDF中提取文本时可能会出错,甚至可能根本无法打开某些PDF。很不幸的是,我们对此无能为力。
    #打开指定文件
    import PyPDF2
    pdfFile = open('./data/example.pdf','rb')
    
    #创建读取器对象
    pdfReader = PyPDF2.PdfFileReader(pdfFile)
    pdfReader   #<PyPDF2.pdf.PdfFileReader at 0x10afe1cf8>
    
    #返回总页码数
    pdfReader.numPages
    
    #获取指定页面对象
    page = pdfReader.getPage(0)
    
    #提取出页面中的文字
    page.extractText()
    

    PDF的写入操作

    • 将一个完整pdf拆分成两个单独的pdf文件进行保存,且去除不想要的指定页面
    import PyPDF2
    pdfFile = open('./data/example.pdf','rb')
    #创建读取器对象
    pdfReader = PyPDF2.PdfFileReader(pdfFile)
    #创建写入器对象
    pdfWriter1 = PyPDF2.PdfFileWriter()
    pdfWriter2 = PyPDF2.PdfFileWriter()
    
    all_pages = pdfReader.numPages
    for page in range(all_pages):
        #去除不想要的页面
        if page in [1,3,5,7,9]:
            continue
        #获取中间页码值
        middle_num = all_pages // 2
        #提取一页数据
        pageObj = pdfReader.getPage(page)
        if page <= middle_num:
            pdfWriter1.addPage(pageObj)
        else:
            pdfWriter2.addPage(pageObj)
            
    f1 = open('./data/example_1.pdf','wb')  
    f2 = open('./data/example_2.pdf','wb')
    pdfWriter1.write(f1)
    pdfWriter2.write(f2)
    
    pdfFile.close()
    f1.close()
    f2.close()
    
    • 注意:

      • PyPDF2 不能在 PdfFileWriter 对象中间插入页面,addPage()方法只能够在末尾添加页面。
    • 旋转页面

      • 利用 rotateClockwise()和 rotateCounterClockwise()方法,PDF 文档的页面也可以 旋转 90 度的整数倍。向这些方法传入整数 90、180 或 270 就可以了
    #翻转第一张页面
    import PyPDF2
    minutesFile = open('./data/example.pdf', 'rb')
    pdfReader = PyPDF2.PdfFileReader(minutesFile)
    page = pdfReader.getPage(0)
    page.rotateCounterClockwise(90)
    
    #创建写入器,将翻转的第一张页面添加到写入器中
    pdfWriter = PyPDF2.PdfFileWriter()
    pdfWriter.addPage(page)
    
    
    #将翻转的页面写入到一个新的pdf中
    resultPdfFile = open('./data/rotatedPage.pdf', 'wb')
    pdfWriter.write(resultPdfFile)
    resultPdfFile.close()
    minutesFile.close()
    
    • 叠加页面
      • PyPDF2 也可以将一页的内容叠加到另一页上,这可以用来在页面上添加公司标志、时间戳或水印。利用 Python,很容易为多个文件添加水印,并且只针对程序 指定的页面添加。
    import PyPDF2
    #打开需要添加水印的pdf
    pythonFile = open('./data/example.pdf', 'rb')
    #对需要添加水印的pdf生成器读取器
    pdfReader = PyPDF2.PdfFileReader(pythonFile)
    
    #生成水印pdf的读取器
    pdfWatermarkReader = PyPDF2.PdfFileReader(open('./data/watermark.pdf', 'rb'))
    
    
    
    #创建写入器对象
    pdfWriter = PyPDF2.PdfFileWriter()
    #遍历需要添加水印pdf的每一页
    for pageNum in range(0, pdfReader.numPages): 
        #获取页面对象
        pageObj = pdfReader.getPage(pageNum)
        #添加水印(叠加两张页面)
        pageObj.mergePage(pdfWatermarkReader.getPage(0))
        #添加到写入器中(注意:写入器中已经添加了水印)
        pdfWriter.addPage(pageObj)
    resultPdfFile = open('./data/watermarkedCover.pdf', 'wb') 
    pdfWriter.write(resultPdfFile)
    minutesFile.close()
    resultPdfFile.close()
    
    • 加密 PDF
      • PdfFileWriter 对象也可以为 PDF 文档进行加密
      • encrypt()方法,传入口令字符串。PDF 可以有一个用户口令(允许查看这个PDF)和一个拥有者口令(允许设置打印、注释、 提取文本和其他功能的许可)。用户口令和拥有者口令分别是 encrypt()的第一个和第二个参数。如果只传入一个字符串给 encrypt(),它将作为两个口令。
    import PyPDF2
    pdfFile = open('./data/watermark.pdf', 'rb') 
    pdfReader = PyPDF2.PdfFileReader(pdfFile) 
    pdfWriter = PyPDF2.PdfFileWriter()
    for pageNum in range(pdfReader.numPages): 
        pdfWriter.addPage(pdfReader.getPage(pageNum))
    pdfWriter.encrypt('1324')
    resultPdf = open('./data/encryptedminutes.pdf', 'wb')
    pdfWriter.write(resultPdf)
    resultPdf.close()
    
    • 项目:从多个 PDF 中合并选择的页面
      • 假定你有一个很无聊的任务,需要将几十个 PDF 文件合并成一个 PDF 文件。每 一个文件都有一个封面作为第一页,但你不希望合并后的文件中重复出现这些封 面。即使有许多免费的程序可以合并 PDF,很多也只是简单的将文件合并在一起。 让我们来写一个 Python 程序,定制需要合并到 PDF 中的页面。
      • 总的来说,该程序需要完成:
        • 找到当前工作目录中所有 PDF 文件。
        • 按文件名排序,这样就能有序地添加这些 PDF。
        • 除了第一页之外,将每个 PDF 的所有页面写入输出的文件。
      • 从实现的角度来看,代码需要完成下列任务:
        • 调用 os.listdir(),找到当前工作目录中的所有文件,去除掉非 PDF 文件。
        • 调用 Python 的 sort()列表方法,对文件名按字母排序。
        • 为输出的 PDF 文件创建 PdfFileWriter 对象。
        • 循环遍历每个 PDF 文件,为它创建 PdfFileReader 对象。
        • 针对每个 PDF 文件,循环遍历每一页,第一页除外。 将页面添加到输出的 PDF。
        • 将输出的 PDF 写入一个文件,名为 allminutes.pdf。
        • 针对这个项目,打开一个新的文件编辑器窗口,将它保存为 combinePdfs.py。
  • 相关阅读:
    3
    正确的消费理念和方式
    2
    1
    善待精力,保持体力,保持热情
    为什么不从今天开始呢?
    c++中的新成员
    函数重载分析下
    函数重载分析上
    函数参数的扩展
  • 原文地址:https://www.cnblogs.com/bubu99/p/16325126.html
Copyright © 2020-2023  润新知