Python PyPDF2:PDF 文件处理的利器

一、简介

Python PyPDF2 是一个强大的 Python PDF 库,它可以用于处理 PDF 文件,例如合并、拆分、旋转、剪切、添加文字水印和图片水印、加密、解密、统计页面数量等等。 PyPDF2 可以灵活的操作 PDF 文件,而且可以与其他 Python 库结合起来实现更多功能。 这里将介绍 PyPDF2 的常用功能。

二、合并 PDF 文件

合并多个 PDF 文件成一个单独的 PDF 文件,通过 PyPDF2 很容易实现。使用 PyPDF2.PdfFileMerger() 创建一个 PDF 合并器,并添加要合并的 PDF 文件,最后输出到目标文件。

from PyPDF2 import PdfFileMerger

pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf']   # 要合并的 PDF 文件列表

merger = PdfFileMerger()

for pdf in pdfs:
    merger.append(open(pdf, 'rb'))

with open('merged_file.pdf', 'wb') as output:
    merger.write(output)

三、PDF 文件页数统计

通过 PyPDF2 可以方便地获得 PDF 文件中页面的数量。使用 PdfFileReader 类读取 PDF 文件,获取页面数量。

from PyPDF2 import PdfFileReader

pdf_file = 'file.pdf'   # 文件路径

with open(pdf_file, 'rb') as f:
    pdf = PdfFileReader(f)
    pages = pdf.getNumPages()
    print(f'Total pages: {pages}')

四、PDF 文件内容提取

提取 PDF 页面中的文本内容通常需要用到第三方 OCR(Optical Character Recognition)工具,但是 PyPDF2 可以直接提取已经能够被识别的文本。使用 PdfFileReader 类读取 PDF 文件,获取页面对象,然后通过 extractText() 方法提取页面文本内容。

from PyPDF2 import PdfFileReader

pdf_file = 'file.pdf'   # 文件路径

with open(pdf_file, 'rb') as f:
    pdf = PdfFileReader(f)
    page = pdf.getPage(0)   # 获取第一页
    text = page.extractText()
    print(text)

五、PDF 文件页面剪切

剪切 PDF 文件中的某一页,通过 PyPDF2 可以方便的实现。使用 PdfFileReader 类读取 PDF 文件,获取页面对象,然后使用 PdfFileWriter 类创建一个新的 PDF 文件,并添加页面对象,最后输出到目标文件。

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_file = 'file.pdf'   # 文件路径

with open(pdf_file, 'rb') as f:
    pdf = PdfFileReader(f)
    page = pdf.getPage(0)   # 获取第一页

    writer = PdfFileWriter()
    writer.addPage(page)   # 添加页面对象

    with open('new_file.pdf', 'wb') as output:
        writer.write(output)

六、PDF 文件加密

通过 PyPDF2 可以对 PDF 文件进行加密保护。使用 PdfFileWriter 类创建一个新的 PDF 文件,并设置加密选项,最后输出到目标文件。

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_file = 'file.pdf'   # 文件路径

with open(pdf_file, 'rb') as f:
    pdf = PdfFileReader(f)

    writer = PdfFileWriter()

    for i in range(pdf.getNumPages()):
        writer.addPage(pdf.getPage(i))

    writer.encrypt('password', use_128bit=True)

    with open('enc_file.pdf', 'wb') as output:
        writer.write(output)

七、PDF 文件添加文字水印

通过 PyPDF2 可以在 PDF 文件页面上添加文字水印。使用 PdfFileWriter 类创建一个新的 PDF 文件,通过 PdfFileReader 类读取 PDF 文件中的页面对象,并在页面上添加水印,添加到新的 PDF 文件中,并输出到目标文件。

from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.pdf import ContentStream
from PyPDF2.pdf import TextStringObject
from PyPDF2.pdf import PageObject

pdf_file = 'file.pdf'   # 文件路径
text_font = 'Arial'   # 水印文字字体
text_size = 24   # 水印文字大小
text_color = '#ff0000'   # 水印颜色
position_x = 100   # 水印横坐标位置
position_y = 100   # 水印纵坐标位置
rotate = False   # 是否旋转水印

with open(pdf_file, 'rb') as f:
    pdf = PdfFileReader(f)

    writer = PdfFileWriter()

    for i in range(pdf.getNumPages()):
        page = pdf.getPage(i)

        # 创建水印
        text = TextStringObject('WATERMARK', fontName=text_font, fontSize=text_size, fillColor=text_color)

        # 创建水印对象
        text_obj = ContentStream([text], page.pdf)
        watermark = PageObject.createBlankPage(None)
        watermark.mergeContentStreams(text_obj)

        # 设置水印位置和旋转角度
        watermark.mediaBox.upperRight = page.mediaBox.upperRight
        watermark.translate(position_x, position_y)

        if rotate:
            watermark.rotateClockwise(45)

        # 合并水印和页面内容
        page.mergePage(watermark)

        writer.addPage(page)

    with open('watermark_file.pdf', 'wb') as output:
        writer.write(output)

八、PDF 文件添加图片水印

通过 PyPDF2 可以在 PDF 文件页面上添加图片水印。使用 PdfFileWriter 类创建一个新的 PDF 文件,通过 PdfFileReader 类读取 PDF 文件中的页面对象,并在页面上添加水印,添加到新的 PDF 文件中,并输出到目标文件。

from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.pdf import ContentStream
from PyPDF2.pdf import ImageObject
from PyPDF2.pdf import PageObject

pdf_file = 'file.pdf'   # 文件路径
image_file = 'watermark.png'   # 水印图片路径
position_x = 100   # 水印横坐标位置
position_y = 100   # 水印纵坐标位置
scale = 0.5   # 水印大小比例
rotate = False   # 是否旋转水印

with open(pdf_file, 'rb') as f:
    pdf = PdfFileReader(f)

    writer = PdfFileWriter()

    for i in range(pdf.getNumPages()):
        page = pdf.getPage(i)

        # 创建水印
        watermark = ImageObject(image_file)

        # 缩放水印
        watermark.scale(scale)

        # 设置水印位置和旋转角度
        watermark_width = watermark.width
        watermark_height = watermark.height
        watermark_x = position_x - watermark_width / 2
        watermark_y = position_y - watermark_height / 2
        if rotate:
            watermark.rotate(45)
            watermark_x += watermark_height * scale / 2
            watermark_y -= watermark_width * scale / 2

        # 创建水印对象
        image_obj = ContentStream([watermark], page.pdf)
        watermark_page = PageObject.createBlankPage(None)
        watermark_page.mergeContentStreams(image_obj)

        # 合并水印和页面内容
        page.mergePage(watermark_page)

        writer.addPage(page)

    with open('watermark_file.pdf', 'wb') as output:
        writer.write(output)

原创文章,作者:UCVWW,如若转载,请注明出处:https://www.506064.com/n/333265.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UCVWWUCVWW
上一篇 2025-01-27 13:35
下一篇 2025-01-27 13:35

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29

发表回复

登录后才能评论