PythonPDF编辑库之pypdf使用详解

news2024/9/28 23:34:07


概要

PDF(Portable Document Format)是一种常见的文档格式,广泛用于存储和共享文本和图像数据。在 Python 中,有许多库可以用于处理 PDF 文件,其中之一就是 PyPDF。PyPDF 是一个功能强大的库,它允许你读取、创建和操作 PDF 文件。本文将介绍 PyPDF 的基本概念、安装方法以及一些常见的用法示例,以帮助大家开始使用 PyPDF 处理 PDF 文件。


什么是 PyPDF?

PyPDF 是一个用于处理 PDF 文件的 Python 库。它提供了一组工具和功能,用于读取、解析和操作 PDF 文件的内容。

安装 PyPDF

要开始使用 PyPDF,首先需要安装它。可以使用 pip 命令来安装 PyPDF2(PyPDF 的常用版本):

pip install PyPDF2

安装完成后,就可以在 Python 中导入 PyPDF2 模块,并开始处理 PDF 文件。

基本用法示例

1. 读取 PDF 文件内容

使用 PyPDF,可以轻松读取 PDF 文件中的文本内容。

以下是一个示例,演示了如何打开一个 PDF 文件并提取其文本内容:

import PyPDF2

# 打开 PDF 文件
pdf_file = open('example.pdf', 'rb')

# 创建 PDF 读取器对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)

# 获取 PDF 文件中的页数
num_pages = pdf_reader.numPages

# 读取每一页的文本内容
for page_num in range(num_pages):
    page = pdf_reader.getPage(page_num)
    text = page.extractText()
    print(f'Page {page_num + 1}:\n{text}\n')

# 关闭 PDF 文件
pdf_file.close()

2. 创建新的 PDF 文件

PyPDF 也可以创建新的 PDF 文件。

以下是一个示例,演示了如何创建一个空白的 PDF 文件并添加一些文本内容:

import PyPDF2

# 创建一个新的 PDF 文件
pdf_file = open('new_document.pdf', 'wb')

# 创建 PDF 写入器对象
pdf_writer = PyPDF2.PdfFileWriter()

# 创建一个 PDF 页
page = PyPDF2.PdfFileReader('blank_page.pdf').getPage(0)

# 添加文本到页中
page.mergeTranslatedPage(page, 100, 200)
pdf_writer.addPage(page)

# 将写入的内容保存到文件中
pdf_writer.write(pdf_file)

# 关闭 PDF 文件
pdf_file.close()

3. 合并多个 PDF 文件

有时候可能需要合并多个 PDF 文件成一个文件。PyPDF 提供了合并 PDF 文件的功能。

以下是一个示例,演示了如何合并两个 PDF 文件:

import PyPDF2

# 打开两个 PDF 文件
pdf1 = open('file1.pdf', 'rb')
pdf2 = open('file2.pdf', 'rb')

# 创建 PDF 读取器对象
pdf_reader1 = PyPDF2.PdfFileReader(pdf1)
pdf_reader2 = PyPDF2.PdfFileReader(pdf2)

# 创建 PDF 写入器对象
pdf_writer = PyPDF2.PdfFileWriter()

# 将两个 PDF 文件的页面添加到写入器中
for page_num in range(pdf_reader1.numPages):
    page = pdf_reader1.getPage(page_num)
    pdf_writer.addPage(page)

for page_num in range(pdf_reader2.numPages):
    page = pdf_reader2.getPage(page_num)
    pdf_writer.addPage(page)

# 创建一个新的合并后的 PDF 文件
merged_pdf = open('merged.pdf', 'wb')
pdf_writer.write(merged_pdf)

# 关闭所有文件
pdf1.close()
pdf2.close()
merged_pdf.close()

更多功能

1. 旋转 PDF 页

有时候,可能需要旋转 PDF 文件中的某些页面,以使其更容易阅读或打印。PyPDF2 可以旋转 PDF 页,可以选择逆时针或顺时针旋转。

以下是一个示例,演示如何旋转一个 PDF 文件中的所有页面:

import PyPDF2

# 打开 PDF 文件
pdf_file = open('example.pdf', 'rb')

# 创建 PDF 读取器对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)

# 创建 PDF 写入器对象
pdf_writer = PyPDF2.PdfFileWriter()

# 逆时针旋转每一页并添加到写入器中
for page_num in range(pdf_reader.numPages):
    page = pdf_reader.getPage(page_num)
    page.rotateClockwise(90)  # 旋转90度
    pdf_writer.addPage(page)

# 创建一个新的旋转后的 PDF 文件
rotated_pdf = open('rotated.pdf', 'wb')
pdf_writer.write(rotated_pdf)

# 关闭所有文件
pdf_file.close()
rotated_pdf.close()

在这个示例中,打开一个 PDF 文件,逆时针旋转了每一页,并将它们添加到一个新的 PDF 文件中,从而实现了页面的旋转。

2. 处理 PDF 表单

PDF 文件中的表单通常包含文本字段、复选框、下拉框等。PyPDF2 可以处理 PDF 表单数据,包括填写表单和提取表单数据。

以下是一个示例,演示如何使用 PyPDF2 处理 PDF 表单:

import PyPDF2

# 打开 PDF 文件
pdf_file = open('form.pdf', 'rb')

# 创建 PDF 表单对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
pdf_writer = PyPDF2.PdfFileWriter()

# 填写表单字段
pdf_writer.updatePageFormFieldValues(pdf_reader.getPage(0), {
    'Name': 'John Doe',
    'Email': 'johndoe@email.com',
    'Country': 'USA'
})

# 创建一个新的带有填写后表单的 PDF 文件
filled_form_pdf = open('filled_form.pdf', 'wb')
pdf_writer.write(filled_form_pdf)

# 关闭所有文件
pdf_file.close()
filled_form_pdf.close()

在这个示例中,打开一个包含表单的 PDF 文件,然后使用 updatePageFormFieldValues 方法填写表单字段,并将填写后的表单保存为一个新的 PDF 文件。

3. PDF 加密和解密

保护 PDF 文件的机密性是一个重要问题,PyPDF2 可以对 PDF 文件进行加密和解密。

以下是一个示例,演示如何加密和解密 PDF 文件:

加密 PDF 文件

import PyPDF2

# 打开 PDF 文件
pdf_file = open('document.pdf', 'rb')

# 创建 PDF 写入器对象
pdf_writer = PyPDF2.PdfFileWriter()

# 添加需要加密的页面
pdf_writer.addPage(pdf_reader.getPage(0))

# 设置密码
pdf_writer.encrypt('mypassword')

# 创建一个新的加密 PDF 文件
encrypted_pdf = open('encrypted.pdf', 'wb')
pdf_writer.write(encrypted_pdf)

# 关闭所有文件
pdf_file.close()
encrypted_pdf.close()

解密 PDF 文件

import PyPDF2

# 打开加密的 PDF 文件
pdf_file = open('encrypted.pdf', 'rb')

# 解密 PDF 文件
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
pdf_reader.decrypt('mypassword')

# 获取解密后的内容
page = pdf_reader.getPage(0)
text = page.extractText()
print(text)

# 关闭文件
pdf_file.close()

在这个示例中,首先加密了一个 PDF 文件,然后使用密码解密了它,以便读取内容。

集成 PyPDF 到工作流程

  1. 文档处理:用于提取、合并、拆分和转换 PDF 文档,以满足不同的文档需求。

  2. 报告生成:生成包含图表、表格和文本的 PDF 报告,用于数据分析和可视化。

  3. PDF 表单处理:处理 PDF 表单,自动化数据收集和处理流程。

  4. 文档自动化处理:在自动化任务中使用 PyPDF 来处理 PDF 文件,提高工作效率。

总结

Python PyPDF 是一个功能强大的库,用于处理 PDF 文件。它可以用于读取、创建、合并和转换 PDF 文档,以及执行许多其他与 PDF 有关的任务。希望本文提供的示例代码和介绍有助于大家入门 PyPDF,并在项目中使用它来处理 PDF 文件。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1414161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568平台 麦克风PDM接口录音

一.PDM接口简介 PDM Pulse Density Modulation是一种用数字信号表示模拟信号的调制方法。 PDM则使用远高于PCM采样率的时钟采样调制模拟分量,只有1位输出,要么为0,要么为1。因此通过PDM方式表示的数字音频也被称为Oversampled 1-bit Audio…

Leetcode—145. 二叉树的后序遍历【简单】

2023每日刷题(九十七) Leetcode—145. 二叉树的后序遍历 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr…

Go、容器以及Linux调度器

在容器中运行Go应用程序时,需要设置合理的GOMAXPROCS,从而避免调度中因为资源不足而造成STW。原文: Go, Containers, and the Linux Scheduler Go开发的应用程序通常部署在容器中。在容器中运行时,重要的一点是要设置CPU限制以确保容器不会耗…

十款数据可视化工具横评:优缺点大揭秘

作为一位热衷于数据可视化的爱好者,我深知选择一款得心应手的数据可视化工具对于呈现数据的魅力至关重要。在市面上众多的数据可视化工具中,我精选了十款备受瞩目的产品,下面就为大家简单介绍一下它们的优缺点,以帮助大家进行选择…

Windows下载安装并启动 Elasticsearch(ES)

我们先访问官网链接 https://www.elastic.co/cn/downloads/elasticsearch 进入官网后 Choose platform 选择我们自己的电脑系统 我这里是 Windows 然后 点击如下图 箭头指向的这个下载按钮 它就开始下了 这个文件还是偏大的 然后 这里 我创建一个目录 专门用来装它 然后 我…

SD342X-16Q双偏心软密封蝶阀的选型技巧分享

SD342X-16Q双偏心软密封蝶阀的选型技巧分享 选择SD342X-16Q双偏心软密封蝶阀软密封蝶阀时,需要考虑以下几个事项: 1.流体性质: 了解流体的压力、温度、粘度等特性,选择适合的软密封材料。不同材料对于不同流体具有不同的耐腐蚀性…

mac滚动截图

参考博客 https://www.zhihu.com/question/313673726/answer/2938671835 首先去AppStore搜索 iShot 这个也是要钱的,不过我输入appleID后,并没有扣我钱,不知道设么回事 然后打开iShot 点击观看视频,然后mac会自动打开一个新的…

OpenAI 降低价格并修复拒绝工作的“懒惰”GPT-4,另外ChatGPT 新增了两个小功能

OpenAI降低了GPT-3.5 Turbo模型的API访问价格,输入和输出价格分别降低了50%和25%。这对于使用API进行文本密集型应用程序的用户来说是一个好消息。 OpenAI官网:OpenAI AIGC专区:aigc 教程专区:AI绘画,AI视频&#x…

【HarmonyOS应用开发】TypeScript快速入门(二)

内容比较长,干货满满,全是实战操作内容,希望耐心观看,如果对你有所帮助,请点个赞! ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI…

CSDN年度报告图片卡通小人收集

摘要:CSDN推出的年度报告真的太赞了,还定制了诸如“情感的编织者”“敏锐的激励者”“灵感的捕捉者”“组织的表达者”“洞悉的指挥家”“心灵的领航员”“生动的记录者”“温暖的叙述者”“理性的探索者”等等精准且浪漫的标签,加上非常有灵…

嵌入式linux学习之实践操作

​ 前沿 1. 安装交叉编译器 在开发板光盘 A-基础资料->5、开发工具->1、交叉编译器路径下找到 st-example-image-qt wayland-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-snapshot.sh。将它拷贝到 Ubuntu 虚拟机上。 拷贝到 Ubuntu 后,赋予 st-exam…

快速搭建一个基于MVC架构的Spring Boot应用

提示:如果对 MVC 架构模式不熟悉可以看我的博客 > MVC架构模式与三层架构 快速搭建一个基于MVC架构的Spring Boot应用 一、Web 服务二、快速构建一个Spring Web MVC的 Web 应用1.使用脚手架快速的搭建环境:2.准备数据库:3.编写Dao层访问数…

Vue3在css中使用v-bind绑定js/ts变量,也可以在scss和less中使用方式

主要介绍Vue3中的新增的v-bind()的常用使用方式,主要包括在css,less,scss中的使用,可以参考官方文档查看:Vue3官方文档 特别提醒 如果你想在scss中或者less中使用,可能会报各种乱七八糟的错误,最快最好用的方式就是单…

远程git开发

两种本地与远程仓库同步 """ 1)你作为项目仓库初始化人员:线上要创建空仓库 > 本地初始化好仓库 > 建立remote链接(remote add) > 提交本地仓库到远程(push)2)你作为项目后期开发人员:远程项目仓库已经创…

Github 2024-01-27 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3Jupyter Notebook项目2非开发语言项目2JavaScript项目1Go项目1Rust项目1Shell项目1 Papers We Lo…

IDC机房交换机核心技术与应用指南

IDC机房交换机核心技术与应用指南 ​ 在这个快速发展的数字时代,数据中心作为信息技术的心脏,不仅承载着海量数据的处理、存储和传输,更是支撑着全球企业运营和互联网服务的关键基础设施。在众多构成数据中心的组件中,IDC机房交换…

11.Elasticsearch应用(十一)

Elasticsearch应用(十一) 1.什么是自动补全 现代的搜索引擎,一般都会提供Suggest as you type的功能 帮助用户在输入搜索的过程中,进行自动补全或者纠错。通过协助用户输入更加精准的关键词,提高后续搜索阶段文档的…

Spring Cloud 之Config详解

大家好,我是升仔 在微服务架构中,统一的配置管理是维护大规模分布式系统的关键。Spring Cloud Config为微服务提供集中化的外部配置支持,它可以与各种源代码管理系统集成,如Git、SVN等。本文将详细介绍如何搭建配置服务器、管理客…

【机组】基于FPGA的32位算术逻辑运算单元的设计(EP2C5扩充选配类)

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 一、实验目的 二、实验要求 …

Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )

目录 事务事务概念什么是事务事务四个特性(ACID) 搭建事务操作环境Spring 事务管理介绍注解声明式事务管理声明式事务管理参数配置XML 声明式事务管理事务操作(完全注解声明式事务管理)感谢阅读 开篇: 欢迎再次来到 Spring 5 学习…