Python处理PDF组件使用及注意事项
在 Python 中处理 PDF 文件时, 使用的组件及注意事项如下:
1. PyPDF2 / PyPDF4
说明:
PyPDF2 和 PyPDF4 都是功能强大的 PDF 操作库,适用于合并、拆分、旋转 PDF 文件,提取 PDF 元数据等。PyPDF4 是 PyPDF2 的一个分支,主要解决了部分 bug,并做了一些小改进。
功能:
• 合并 PDF:合并多个 PDF 文件为一个文件。
• 拆分 PDF:将一个 PDF 文件拆分为多个单页文件。
• 旋转页面:旋转 PDF 页面的方向。
• 提取文本和元数据:可以提取简单的文本和 PDF 元数据。
示例:合并 PDF 文件
import PyPDF2def merge_pdfs(pdf_list, output_path):try:pdf_merger = PyPDF2.PdfMerger()# 合并多个 PDF 文件for pdf in pdf_list:pdf_merger.append(pdf)with open(output_path, 'wb') as output_file:pdf_merger.write(output_file)print(f"合并成功,输出到 {output_path}")except Exception as e:print(f"错误:{e}")pdf_files = ['file1.pdf', 'file2.pdf']
output_path = 'merged_output.pdf'
merge_pdfs(pdf_files, output_path)
注意事项:
• 文本提取效果差:PyPDF2 的文本提取能力较差,不适用于复杂布局或表格数据提取。
• 页面操作:PyPDF2 适合做简单的页面合并、拆分和旋转操作,但不支持图像提取或高精度的布局分析。
2. pdfminer.six
说明:
pdfminer.six 是一个强大的 PDF 文本提取库,尤其适用于精确提取页面上的文本,支持复杂的文本布局、字体、字符信息的提取。非常适合需要高精度文本解析的任务。
功能:
• 文本提取:提取 PDF 页面的文本,并保留布局信息。
• 字符级别提取:提取文本时可以获取每个字符的位置、字体信息。
• 支持多种 PDF 格式:支持包括嵌入式字体和多列文本布局的 PDF 文件。
示例:提取 PDF 文本
from pdfminer.high_level import extract_textdef extract_pdf_text(file_path):try:text = extract_text(file_path)if not text:raise ValueError("没有提取到文本")return textexcept Exception as e:print(f"错误:{e}")return Nonefile_path = 'example.pdf'
text = extract_pdf_text(file_path)
if text:print(text)
else:print("文本提取失败")
注意事项:
• 性能较差:pdfminer.six 在处理大文件或多页文件时,速度较慢,特别是需要获取复杂的布局信息时。
• 不支持 OCR:pdfminer.six 无法处理扫描版 PDF 文件,需要结合 OCR 技术使用(例如结合 Tesseract)。
3. pdfplumber
说明:
pdfplumber 是基于 pdfminer.six 的一个封装库,主要用于提取 PDF 中的表格数据。它提供了比 pdfminer.six 更简单的 API,可以更容易地提取 PDF 中的表格,同时支持文本和图像提取。
功能:
• 表格提取:通过 extract_table() 提取 PDF 中的表格,保留表格结构。
• 文本提取:提取文本,同时提供文本的布局信息。
• 图像提取:提取 PDF 页面中的图像。
示例:提取表格数据
import pdfplumberdef extract_table(file_path):try:with pdfplumber.open(file_path) as pdf:page = pdf.pages[0] # 提取第一页table = page.extract_table()if not table:raise ValueError("没有提取到表格")return tableexcept Exception as e:print(f"错误:{e}")return Nonefile_path = 'example.pdf'
table = extract_table(file_path)
if table:for row in table:print(row)
else:print("表格提取失败")
注意事项:
• 表格提取效果受 PDF 格式影响:pdfplumber 的表格提取效果依赖于 PDF 文件的排版,复杂的表格结构可能导致提取错误。
• 性能问题:对于包含大量页面或表格的 PDF 文件,提取速度可能较慢。
4. PyMuPDF (fitz)
说明:
PyMuPDF(也叫 fitz)是一个非常强大的 PDF 处理库,支持文本、图像、页面渲染和注释提取等功能。它不仅速度较快,而且支持对 PDF 文件的全面操作。
功能:
• 文本提取:提取 PDF 中的文本。
• 图像提取:提取 PDF 页面中的图像。
• 页面渲染:将 PDF 页面渲染为图像格式。
• 注释提取:提取 PDF 页面中的注释和超链接等。
示例:提取文本并渲染页面为图像
import fitz # PyMuPDF
from PIL import Image
import iodef extract_text_and_images(file_path):try:doc = fitz.open(file_path)text = ""images = []# 提取每一页的文本和图像for page_num in range(len(doc)):page = doc.load_page(page_num)text += page.get_text()# 提取页面上的所有图像for img in page.get_images(full=True):xref = img[0]base_image = doc.extract_image(xref)image_bytes = base_image["image"]image = Image.open(io.BytesIO(image_bytes))images.append(image)if not text:raise ValueError("没有提取到文本")return text, imagesexcept Exception as e:print(f"错误:{e}")return None, Nonefile_path = 'example.pdf'
text, images = extract_text_and_images(file_path)
if text:print(text)
if images:for i, img in enumerate(images):img.show(title=f"Image {i}")
else:print("图像提取失败")
注意事项:
• 渲染速度:PyMuPDF 渲染页面为图像时的速度较快,非常适合需要对 PDF 页面进行视觉处理的场景。
• 图像提取:图像提取和页面渲染的能力非常强,支持将页面转换为高质量的图像,适用于扫描版 PDF 的处理。
5. pdf2image
说明:
pdf2image 是一个专门用于将 PDF 页面转换为图像的库。它是处理扫描 PDF 的理想选择,可以将 PDF 页面转换为 PNG 或 JPEG 格式的图像,然后使用 OCR 技术(如 Tesseract)进行文本提取。
功能:
• 将 PDF 页面转换为图像:可以将单个页面或整个 PDF 文件转换为图像。
• 支持多种图像格式:支持将图像保存为 PNG、JPEG 等格式。
示例:将 PDF 页面转换为图像
from pdf2image import convert_from_pathdef convert_pdf_to_images(file_path):try:images = convert_from_path(file_path)if not images:raise ValueError("没有转换为图像")return imagesexcept Exception as e:print(f"错误:{e}")return Nonefile_path = 'example.pdf'
images = convert_pdf_to_images(file_path)
if images:for i, img in enumerate(images):img.show(title=f"Page {i+1}")
else:print("PDF 转换失败")
注意事项:
• 性能问题:处理大型 PDF 文件时,转换为图像的过程可能较慢,且内存消耗较大。
• 依赖 Poppler:pdf2image 需要安装 Poppler,确保系统中有正确的安装环境。
总结:
1.PyPDF2 / PyPDF4
功能:合并、拆分、旋转页面,提取元数据
适用场景:基本的页面操作(合并、拆分、旋转)
注意事项:文本提取能力较差,不适用于复杂 PDF 文本解析
2.pdfminer.six
功能:高精度文本提取,支持字体、字符、布局信息
适用场景:精确提取文本,处理复杂文本布局
注意事项:处理大文件时较慢,无法处理扫描版 PDF
3.pdfplumber
功能:提取表格,文本提取,支持图像提取
适用场景:需要提取表格和页面结构的 PDF
注意事项:对复杂的表格和布局提取可能效果不佳
4.PyMuPDF
功能:文本、图像、页面渲染,注释提取
适用场景:高效的多功能 PDF 处理,页面渲染与图像提取
注意事项:渲染大文件时可能内存消耗较高
5.pdf2image
功能:将 PDF 页面转换为图像
适用场景:需要将 PDF 页面转换为图像(与 OCR 结合)
注意事项:需要 Poppler 支持,处理大型 PDF 时性能较差
建议:
如果需要提取文本和表格,pdfminer.six 和 pdfplumber 是不错的选择;如果要进行 PDF 页面操作,PyPDF2 或 PyPDF4 很方便;而对于需要渲染或处理图像的任务,PyMuPDF 或 pdf2image 更加合适。
相关文章:
Python处理PDF组件使用及注意事项
在 Python 中处理 PDF 文件时, 使用的组件及注意事项如下: 1. PyPDF2 / PyPDF4 说明: PyPDF2 和 PyPDF4 都是功能强大的 PDF 操作库,适用于合并、拆分、旋转 PDF 文件,提取 PDF 元数据等。PyPDF4 是 PyPDF2 的一个分…...
langgraph_plan_and_execute
整体入门demo 教程概览 欢迎来到LangGraph教程! 这些笔记本通过构建各种语言代理和应用程序,介绍了如何使用LangGraph。 快速入门(Quick Start) 快速入门部分通过一个全面的入门教程,帮助您从零开始构建一个代理&a…...
[代码随想录打卡Day8] 344.反转字符串 541. 反转字符串II 54. 替换数字
反转字符串 难度:易。 问题描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 这个就是开头…...
DCN DCWS-6028神州数码 AC 设备配置笔记
DCN DCWS-6028神州数码 AC 设备配置笔记 一、前期准备 PC 电脑网络配置 目的:使 PC 能够访问 AC 的 web 管理控制台。配置详情:web 管理控制台地址为 192.168.1.10,将 PC 电脑 IP 地址配置在 192.168.1.1 - 192.168.1.254 网段内,如 192.168.1.110,子网掩码 255.255.255.…...
Go语言的常用内置函数
文章目录 一、Strings包字符串处理包定义Strings包的基本用法Strconv包中常用函数 二、Time包三、Math包math包概述使用math包 四、随机数包(rand) 一、Strings包 字符串处理包定义 Strings包简介: 一般编程语言包含的字符串处理库功能区别…...
华为OD技术一面手撕题
150. 逆波兰表达式求值 来自leecode 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。每个操作数(运算对象)都…...
Qt低版本多网卡组播bug
原文地址 最近在某个项目中,发现了一个低版本Qt的bug,导致组播无法正常使用,经过一番排查,终于找到了原因,特此记录。 环境 Qt:5.7.0 mingw32操作系统:windows 11 现象 在Qt5.7.0版本中&…...
Leetcode:540. 有序数组中的单一元素
题目 给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。 输入: nums [1,1,2,3,3,4,4,8,8] 输出: 2 输入:…...
Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)
数据可视化或者数据绘图是数据分析中最重要的任务之一,是数据探索过程的一部分,数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员,构建基于Web的数据可视化显示也是一种重要的方式。Pyth…...
数组指针和指针的区别
区分数组指针和指针数组 int *p[3]和 int (*p)[3] 根据运算符的优先级,"[]"的优先级是高于“*”的,p就会先与[]结合,那么它本质就是数组,数组内存放的是指针,它叫指针数组。(int*p[3]ÿ…...
Linux git-bash配置
参考资料 命令提示符Windows下的Git Bash配置,提升你的终端操作体验WindowsTerminal添加git-bash 目录 一. git-bash配置1.1 解决中文乱码1.2 修改命令提示符 二. WindowsTerminal配置git-bash2.1 添加git-bash到WindowsTerminal2.2 解决删除时窗口闪烁问题 三. VS…...
【后端速成Vue】computed计算属性
前言: 本期将会介绍 Vue 中的计算属性,他和 methods 方法又会有什么区别呢?在这里都会给你一一讲解。 篮球哥找工作专属IT岗位内部推荐: 专属内推链接:内推通道 1、computed计算属性 概念: 基于现有的数据…...
力扣-每日温度
. - 力扣(LeetCode) 这是我的第一个思路 虽然可以得到正确答案 但是过于暴力 已经超出了时间限制 class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {vector<int>ans;for (int i 0; i <…...
(Go语言)初上手Go?本篇文章帮拿捏Go的数据类型!
1. bool 类型 布尔类型:只有 true 和 false 两种值 在Go中,整数 0 不代表 false 值,1也不代表 true 值 即数字无法代替布尔值进行逻辑判断,两者是完全不同的类型 布尔类型占用 1 字节 2. int 整型 Go中为不同位数的整数分配…...
支付宝域名如何加入白名单(扫码老是弹窗)
支付宝扫码之后,遇到非支付宝官方网页,请确认是否继续访问弹窗,问题解决办法。 本章教程提供解决办法,亲测有效。 一、打开支付宝开放平台 登录地址:https://open.alipay.com/ 然后进行扫码登录。 1、打开网页/移动应用开发 2、前往创建 3、创建应用...
嵌入式学习第21天Linux基础
目录 第1章 Linux 系统介绍 1.1 Unix 操作系统(了解) 1.2 Linux 操作系统(了解) 1.3 Linux 操作系统的主要特性(重点) 1.4 Linux 与 Unix 的区别与联系 1.5 GUN 与 GPL(了解) …...
【activiti工作流源码集成】springboot+activiti+mysql+vue+redis工作流审批流集成整合业务绑定表单流程图会签驳回
工作流集成实际项目案例,demo提供 源码获取方式:本文末个人名片直接获取。 前言 activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,请假审批demo从流程绘制到审批结束实例。 一、项目形式 springbootvue…...
华为私有接口类型hybrid
华为私有接口类型hybrid Tip:hybrid类型,简称混合型接口。 本次实验模拟2层网络下 vlan10 vlan20 不能互访,vlan10 vlan20 同时可以访问vlan100 sw1配置如下: <Huawei>sy [Huawei]sys sw1 [sw1]vl ba 10 20 100 [sw1]int…...
计算机的错误计算(一百五十)
摘要 探讨 MATLAB 中 的计算精度问题。当 为含有小数的大数或 ()附近数时,输出会有错误数字。 例1. 已知 计算 直接贴图吧: 另外,16位的正确值分别为 -0.7882256119904400e0、0.1702266977524110e0、-0.…...
【模块化大作战】Webpack如何搞定CommonJS与ES6混战(3)
在前端开发中,模块化是一个重要的概念,不同的模块化标准有不同的特点和适用场景。webpack 同时支持 CommonJS 和 ES6 Module,因此需要理解它们在互操作时 webpack 是如何处理的。 同模块化标准 如果导出和导入使用的是同一种模块化标准&…...
工程认证与Spring Boot:计算机课程管理的新探索
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足,创建了一个计算机管理基于工程教育认…...
vue3的自定义hooks怎么写?
写个hook函数去追踪鼠标位置: 没用hook前: <script setup> import { ref, onMounted, onUnmounted } from vueconst x ref(0) const y ref(0)function update(event) {x.value event.pageXy.value event.pageY }onMounted(() > window.ad…...
SpringBoot项目编译报错 类文件具有错误的版本 61.0, 应为 52.0
springboot项目在编译时报错: /Users/Apple/Developer/art/caicai/cai-api/dubbo-samples/1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/ProviderApplication.java:22:32 java…...
【网络】应用层——HTTP协议
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是HTTP协议。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自:网络 &g…...
ServletContext介绍
文章目录 1、ServletContext对象介绍1_方法介绍2_用例分析 2、ServletContainerInitializer1_整体结构2_工作原理3_使用案例 3、Spring案例源码分析1_注册DispatcherServlet2_注册配置类3_SpringServletContainerInitializer 4_总结 ServletContext 表示上下文对象,…...
让AI帮我用java实现EasyExel读取图片—支持WPS嵌入图片
🌈 场景概述 java 小伙伴相信都使用 EasyExcel 以及 POI 库实现过 Excel 批量导入、导出功能,但只有部分人实现过 excel 导入带图片数据的场景。这个技术实现手段网上也有很多案例和demo,最常见的就是通过 XSSFPictureData 来实现。但是在 W…...
C# 实现对指定句柄的窗口进行键盘输入的实现
在C#中实现对指定句柄的窗口进行键盘操作,可以通过多种方式来实现。以下是一篇详细的指南,介绍如何在C#中实现这一功能。 1. 使用Windows API函数 在C#中,我们可以通过P/Invoke调用Windows API来实现对指定窗口的键盘操作。以下是一些关键的…...
深度学习之卷积问题
1 卷积在图像中有什么直观作用 在卷积神经网络中,卷积常用来提取图像的特征,但不同层次的卷积操作提取到的特征类型是不相同的,特征类型粗分如表1所示。 表1 卷积提取的特征类型 卷积层次特征类型浅层卷积边缘特征中层卷积局部特征深…...
yum安装zabbix5.0升级php到74的办法
【背景】 公司时不时有扫描漏洞,之前发现了php漏洞,因开启防火墙,限定IP+端口,暂时躲过升级;现在,老话重提,开启了KPI考核,躲是躲不过去的了,升级吧 【难题】 服务器为centos7,因操作系统问题,只能安装zabbix5.0。当时图省力,官网的办法,都是yum安装,很是简便。…...
JavaWeb合集23-文件上传
二十三 、 文件上传 实现效果:用户点击上传按钮、选择上传的头像,确定自动上传,将上传的文件保存到指定的目录中,并重新命名,生成访问链接,返回给前端进行回显。 1、前端实现 vue3AntDesignVue实现 <tem…...
WordPress本地可以调出点赞功能吗/宁波seo推荐优化
项目名称brpc-java 是 baidu rpc 的 java 版本实现,支持 baidu rpc、nshead、sofa、hulu、http、stargate、dubbo 等协议。核心功能点支持 baidu rpc 标准协议、sofa 协议、hulu 协议、nsheadprotobuf 协议、httpprotobuf/json 协议、public pbrpc、stargate、dubbo…...
网站设置5个关键词/百家号查询排名数据查询
系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo …...
网站体验步骤/seo优化价格
这篇文章主要介绍了php使用curl简单抓取远程url的方法,涉及php操作curl的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php使用curl抓取远程url的方法。分享给大家供大家参考。具体如下: cURL是一个非常有用的php库,可以用来连接不通类…...
成品网站整套源码/百度推广服务费3000元
curl -I"http://foobar:8080/jmx-console/HtmlAdaptor?actioninvokeOpByName&nameUCMDB%3Aservice%3DAuthorizationServices&methodNamecreateUser&arg0&arg1zdi-poc&arg2pocuser&arg3zdi-poc&arg4pocuser"...
正规的家居行业网站开发/广告推广 精准引流
java将excel文件中的数据导入到mySql数据库中 完整...研究一下poi官网的下载http://mirror.bjtu.edu.cn/apache//poi/release/网上介绍poi的文档。搜下吧。如何用java实现把excel表中的数据导入到mysql数据...package com.cn.util;import java.io.FileNotFoundException;import…...
骨干专业建设网站/查询网站收录
描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他…...