实战经验:使用 Python 的 PyPDF 进行 PDF 操作

在这里插入图片描述

文章目录

    • 1. 为什么选择 PyPDF?
    • 2. 安装 PyPDF
    • 3. PDF 文件的合并与拆分
      • 3.1 合并 PDF 文件
      • 3.2 拆分 PDF 文件
    • 4. 提取 PDF 文本
    • 5. 修改 PDF 元信息
    • 6. PDF 加密与解密
      • 6.1 加密 PDF
      • 6.2 解密 PDF
    • 7. 页面旋转与裁剪
      • 7.1 旋转页面
      • 7.2 裁剪页面
    • 8. 实战经验总结

PDF 是一种非常常见的文件格式,用于文档共享、电子书、合同等场景。对于开发者来说,能够高效地操作 PDF 文件是一个重要技能。本文将介绍如何使用 Python 的 PyPDF 库完成一些常见的 PDF 处理任务,并分享实战经验。

1. 为什么选择 PyPDF?

PyPDF 是一个轻量级且功能强大的 PDF 操作库,支持以下功能:

  • 合并和拆分 PDF 文件
  • 提取文本和元信息
  • 添加或修改文档的元数据
  • 加密和解密 PDF
  • 自定义 PDF 页面旋转或裁剪

以下是一些实战场景的详细实现。


2. 安装 PyPDF

首先,需要安装 PyPDF 库。可以使用 pip:

pip install pypdf

确保安装的是最新版,以获得最新功能和性能改进。


3. PDF 文件的合并与拆分

3.1 合并 PDF 文件

合并多个 PDF 文件在生成报告或整理文档时非常有用。

from pypdf import PdfMerger# 初始化合并器
merger = PdfMerger()# 添加需要合并的 PDF 文件
merger.append("file1.pdf")
merger.append("file2.pdf")# 保存合并后的文件
merger.write("merged.pdf")
merger.close()
print("PDF 合并完成!")

3.2 拆分 PDF 文件

将一个 PDF 文件拆分为多个独立的页面文件。

from pypdf import PdfReader, PdfWriter# 读取 PDF 文件
reader = PdfReader("input.pdf")# 拆分每一页
for i, page in enumerate(reader.pages):writer = PdfWriter()writer.add_page(page)with open(f"page_{i+1}.pdf", "wb") as output_file:writer.write(output_file)
print("PDF 拆分完成!")

4. 提取 PDF 文本

提取 PDF 文件中的文本内容,可以用于数据分析或自动化处理。

from pypdf import PdfReader# 读取 PDF 文件
reader = PdfReader("input.pdf")# 提取每页的文本
for page in reader.pages:print(page.extract_text())

注意事项

  • 文本提取的效果取决于 PDF 的结构。如果 PDF 中的文本是以图像形式存储的,则无法直接提取文本。

5. 修改 PDF 元信息

修改 PDF 的元数据,例如标题、作者等。

from pypdf import PdfReader, PdfWriterreader = PdfReader("input.pdf")
writer = PdfWriter()# 复制所有页面到新 PDF
writer.add_pages(reader.pages)# 修改元信息
writer.metadata = {"/Title": "新的标题","/Author": "作者名","/Subject": "主题描述"
}with open("output.pdf", "wb") as output_file:writer.write(output_file)
print("元信息修改完成!")

6. PDF 加密与解密

6.1 加密 PDF

为 PDF 文件添加密码保护。

from pypdf import PdfWriterwriter = PdfWriter()
writer.append("input.pdf")# 设置密码
writer.encrypt(user_password="user123", owner_password="owner123")with open("encrypted.pdf", "wb") as output_file:writer.write(output_file)
print("PDF 加密完成!")

6.2 解密 PDF

解密受密码保护的 PDF 文件。

from pypdf import PdfReaderreader = PdfReader("encrypted.pdf")# 提供密码解密
reader.decrypt("user123")for page in reader.pages:print(page.extract_text())

7. 页面旋转与裁剪

7.1 旋转页面

旋转 PDF 的页面,例如将横向页面转为纵向。

from pypdf import PdfReader, PdfWriterreader = PdfReader("input.pdf")
writer = PdfWriter()# 旋转每一页
for page in reader.pages:page.rotate(90)  # 顺时针旋转 90 度writer.add_page(page)with open("rotated.pdf", "wb") as output_file:writer.write(output_file)
print("页面旋转完成!")

7.2 裁剪页面

裁剪页面边框以去掉不必要的内容。

from pypdf import PdfReader, PdfWriterreader = PdfReader("input.pdf")
writer = PdfWriter()for page in reader.pages:# 设置裁剪框 (左, 下, 右, 上)page.mediabox.lower_left = (50, 50)page.mediabox.upper_right = (500, 700)writer.add_page(page)with open("cropped.pdf", "wb") as output_file:writer.write(output_file)
print("页面裁剪完成!")

8. 实战经验总结

  1. 处理异常:在实际操作中,确保捕获文件读写或解析过程中的异常,例如文件不存在或解密失败。
  2. 测试 PDF 文件:由于 PDF 文件格式的多样性,在批量处理前需要先对样本文件进行测试。
  3. 性能优化:对于大文件,使用分批加载的方式处理。
  4. 安全性:避免在代码中硬编码敏感信息,例如密码。

通过本文,您应该对 PyPDF 的常用功能有了清晰的理解,并能应用到实际项目中。如果有更复杂的场景,可以参考官方文档或社区资源深入探索。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不重启JVM,替换掉已经加载的类

不重启JVM,替换掉已经加载的类 直接操作字节码 使用ASM框架直接操作class文件,在类中修改代码,然后retransform就可以了 下边是BTrace官方提供的一个简单例子: package com.sun.btrace.samples;import com.sun.btrace.annotati…

Android系统开发(十五):从 60Hz 到 120Hz,多刷新率进化简史

引言 欢迎来到“帧率探索实验室”!今天,我们要聊聊 Android 11 中对多种刷新率设备的支持。你可能会问:“这和我写代码有什么关系?”别急,高刷新率不仅仅让屏幕更顺滑,还会直接影响用户体验。想象一下&…

Genetic Prompt Search via Exploiting Language Model Probabilities

题目 利用语言模型概率的遗传提示搜索 论文地址:https://www.ijcai.org/proceedings/2023/0588.pdf 项目地址:https://github.com/zjjhit/gap3 摘要 针对大规模预训练语言模型(PLMs)的即时调优已经显示出显著的潜力,尤其是在诸如fewshot学习…

css动画水球图

由于echarts水球图动画会导致ios卡顿&#xff0c;所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…

接口 V2 完善:基于责任链模式、Canal 监听 Binlog 实现数据库、缓存的库存最终一致性

&#x1f3af; 本文介绍了一种使用Canal监听MySQL Binlog实现数据库与缓存最终一致性的方案。文章首先讲解了如何修改Canal配置以适应订单表和时间段表的变化&#xff0c;然后详细描述了通过责任链模式优化消息处理逻辑的方法&#xff0c;确保能够灵活应对不同数据表的更新需求…

postgresql15的停止

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统&#xff0c;且因为许可证的灵活&#xff0c;任何人都可以以任何目的免费使用、修改和分发PostgreSQL。介绍过postgresql的启动方法&#xff0c;就很有必要介绍下postgresql的停止方法。 一、停止…

IP协议格式

在传输层中有两个重要的协议&#xff0c;分别为UDP和TCP。UDP追求高效的效率&#xff0c;TCP追求更可靠的传输。但是这两个协议都太极端了&#xff0c;有没有一个协议可以在保证可靠性的同时又不失较高的效率。 针对上面的问题&#xff0c;网络层的IP协议是更好的解决方案。 …

Qt Creator 15.0.0如何更换主题和字体

1.打开Qt Creator 15.0.0 (Community)&#xff0c; 2.点击编辑栏3.点击Preferences... 4.修改主题&#xff0c;点击环境&#xff0c;修改Theme:栏 5.修改字体大小&#xff0c;点击文本编辑器&#xff0c;修改字号栏。&#xff0c;修改Theme:栏

靶机复现-pikachu靶机文件包含漏洞

本篇文章旨在为网络安全渗透测试靶机复现学习。通过阅读本文&#xff0c;读者将能够对渗透pikachu靶场文件包含漏洞复现有一定的了解 原文学习链接 CSDN博主&#xff1a;One_Blanks主页地址 靶机资源下载 PHPStudy pikachu 一、前言 文件包含漏洞是编程中的一种安全隐患&a…

机器学习-线性回归(简单回归、多元回归)

这一篇文章&#xff0c;我们主要来理解一下&#xff0c;什么是线性回归中的简单回归和多元回归&#xff0c;顺便掌握一下特征向量的概念。 一、简单回归 简单回归是线性回归的一种最基本形式&#xff0c;它用于研究**一个自变量&#xff08;输入&#xff09;与一个因变量&…

5.SQLAlchemy对两张有关联关系表查询

问题 例如&#xff0c;一个用户可以有多个收获地址。 定义表如下&#xff1a; 用户表 地址表 一般情况&#xff0c;我们会先查询用户表&#xff0c;拿到用户id后&#xff0c;再到地址表中查询关联的地址数据。这样就要执行两次查询。 仅仅为了方便查询&#xff0c;需要一些属…

【Unity】ScrollViewContent适配问题(Contentsizefilter不刷新、ContentSizeFilter失效问题)

最近做了一个项目&#xff0c;菜单栏读取数据后自动生成&#xff0c;结果用到了双重布局 父物体 尝试了很多方式&#xff0c;也看过很多大佬的文章&#xff0c;后来自己琢磨了一下&#xff0c;当子物体组件自动生成之后&#xff0c;使用以下以下代码效果会好一些&#xff1a; …

springboot基于微信小程序的商城系统

基于Spring Boot的微信小程序商城系统是一种现代化的电商解决方案&#xff0c;它将Spring Boot框架的强大后端能力与微信小程序的便捷前端体验相结合&#xff0c;为商家和用户提供了高效、稳定的在线购物平台。 一、后端框架 &#xff1a;Spring Boot 1. 简介&#xff1a; 2.…

63,【3】buuctf web Upload-Labs-Linux 1

进入靶场 点击pass1 查看提示 既然是上传文件&#xff0c;先构造一句话木马&#xff0c;便于用蚁剑连接 <?php eval($_POST[123])?> 上传木马 文件后缀写为.php.jpg 右键复制图片地址 打开蚁剑连接 先点击测试连接&#xff0c;显示成功后&#xff0c;再点击添加即可 …

【玩转全栈】----基于ModelForm完成用户管理页面

目录 大致效果 添加用户代码 引入ModelForm ModelForm 与一般表单的区别&#xff1a; ModelForm 与传统 Form 的区别&#xff1a; 使用ModelForm制作用户管理 新建用户 编辑用户&#xff1a; 删除数据 完整代码 在学完前面的部门管理案例后&#xff0c;自己独立写出个用户管理应…

AIGC视频生成模型:ByteDance的PixelDance模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍ByteDance的视频生成模型PixelDance&#xff0c;论文于2023年11月发布&#xff0c;模型上线于2024年9月&#xff0c;同时期上线的模型还有Seaweed&…

深入探究 YOLOv5:从优势到模型导出全方位解析

一、引言 在计算机视觉领域&#xff0c;目标检测是一项至关重要的任务&#xff0c;它在自动驾驶、安防监控、工业检测等众多领域都有着广泛的应用。而 YOLO&#xff08;You Only Look Once&#xff09;系列作为目标检测算法中的佼佼者&#xff0c;一直备受关注。其中&#xff…

Qt —— 控件属性

一、概述 控件有很多属性&#xff0c;我们学习和整理常见和常用的几个属性&#xff0c;由于所有的控件基本都是继承Widget类的&#xff0c;所以前面会先拿Widget类和常见的控件进行示范。 Qt Designer左侧一长条就是Qt给我们内置好的控件&#xff1a; 二、enabled 状态属性 …

会议签到系统的架构和实现

会议签到系统的架构和实现 摘要:通过定制安卓会议机开机APP呈现签到界面&#xff0c;并且通过W/B结构采集管理签到信息&#xff0c;实现会议签到的功能。为达到此目标本文将探讨使用Redis提供后台数据支持&#xff1b;使用SocketIo处理适时消息&#xff1b;使用Flask进行原型开…

WPF实战案例 | C# WPF实现大学选课系统

WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09; 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…