当前位置: 首页 > article >正文

如何用python将pdf转为text并提取其中的图片

要将 PDF 转为文本并提取其中的图片,可以使用 Python 的几个库来实现:

  1. PDF 转文本:使用 PyMuPDFpdfplumber 来提取文本。
  2. 提取图片:使用 PyMuPDFpdf2image 来提取图像。

以下是实现的步骤和代码示例:

1. 安装必要的库

你需要安装以下库:

pip install PyMuPDF pdfplumber Pillow

2. 代码示例

提取 PDF 中的文本

你可以使用 PyMuPDFpdfplumber 来提取 PDF 中的文本。以下是使用 PyMuPDF 提取文本的示例:

import fitz  # PyMuPDF# 打开PDF文件
pdf_document = fitz.open("your_pdf_file.pdf")# 提取每页的文本
text = ""
for page_num in range(pdf_document.page_count):page = pdf_document.load_page(page_num)text += page.get_text()# 输出提取的文本
print(text)
提取 PDF 中的图片

PyMuPDF 可以提取 PDF 中的图像。下面是一个提取图像的示例:

import fitz  # PyMuPDF
import io
from PIL import Image# 打开PDF文件
pdf_document = fitz.open("your_pdf_file.pdf")# 遍历每页并提取图片
image_list = []
for page_num in range(pdf_document.page_count):page = pdf_document.load_page(page_num)# 获取页面的所有图像image_list.extend(page.get_images(full=True))# 保存提取的图像
for img_index, img in enumerate(image_list):xref = img[0]  # 图像的xrefbase_image = pdf_document.extract_image(xref)image_bytes = base_image["image"]# 使用Pillow保存图片image = Image.open(io.BytesIO(image_bytes))image.save(f"image_{img_index + 1}.png")

3. 解释代码

  • PyMuPDF (fitz): 用于处理 PDF 文件,包括提取文本和图像。
  • get_text(): 提取页面中的文本。
  • get_images(full=True): 提取页面中的所有图像。
  • extract_image(): 提取图像内容,并通过 PillowPIL)将图像保存为文件。

4. 输出

  • 代码会提取 PDF 中的所有文本,并将其打印出来。
  • 代码会提取 PDF 中的所有图像,并保存为 PNG 文件。

要将 PDF 中的文本和图片按原本的顺序保存为一个新的文件(例如将文本和图片结合在一起,创建一个新的 PDF),可以使用 PyMuPDF 来处理这个任务。下面是如何提取 PDF 的文本和图片,并按照原始顺序将它们合并并保存为新 PDF 文件的步骤。

步骤:

  1. 提取 PDF 中的文本和图片
  2. 创建新的 PDF,将提取的文本和图片按顺序添加到新的文件中。

1. 安装必要的库

首先,确保你已经安装了所需的库:

pip install PyMuPDF Pillow

2. 代码实现

下面的代码会从原始 PDF 中提取文本和图片,并将它们按顺序保存到一个新的 PDF 文件中。

import fitz  # PyMuPDF
import io
from PIL import Image# 打开原始PDF文件
pdf_document = fitz.open("your_pdf_file.pdf")
new_pdf_document = fitz.open()  # 创建一个新的PDF文件# 遍历每一页
for page_num in range(pdf_document.page_count):page = pdf_document.load_page(page_num)# 提取文本并添加到新页面text = page.get_text()# 创建新的页面,大小与原页面一致new_page = new_pdf_document.new_page(width=page.rect.width, height=page.rect.height)# 将文本添加到新页面new_page.insert_text((10, 10), text, fontsize=12)# 提取图片并添加到新页面image_list = page.get_images(full=True)for img_index, img in enumerate(image_list):xref = img[0]  # 图像的xrefbase_image = pdf_document.extract_image(xref)image_bytes = base_image["image"]# 使用Pillow保存图像并插入到新页面image = Image.open(io.BytesIO(image_bytes))image_path = f"image_{page_num + 1}_{img_index + 1}.png"image.save(image_path)# 在新页面中插入图片,指定位置img_rect = fitz.Rect(100, 100, 300, 300)  # 设置图片插入位置和大小new_page.insert_image(img_rect, filename=image_path)# 保存新的PDF文件
new_pdf_document.save("output_pdf_with_text_and_images.pdf")
new_pdf_document.close()

3. 代码解析

  • 提取文本:使用 get_text() 提取每页的文本内容。
  • 提取图片:通过 get_images() 获取每页的图像,并使用 extract_image() 提取图像数据。提取出的图像会被保存在临时文件中,之后可以使用 insert_image() 将图片插入到新 PDF 页面中。
  • 创建新的 PDF 页面:为每页创建新的页面,并将文本和图像插入到这些页面中。
  • 保存新 PDF:使用 new_pdf_document.save() 方法将新的 PDF 保存为文件。

4. 输出

  • 新生成的 PDF 文件将包含原始 PDF 中的文本和图像,且这些内容将按原始顺序排列。

注意事项:

  1. 图片位置:图像插入位置可以根据需要调整,上述示例中将图片插入到页面的指定位置 (100, 100)。如果需要更精确的定位,可以调整 img_rect
  2. 文本格式insert_text() 只是简单地将文本插入页面。若需要保留原始格式(如字体、大小等),可以考虑其他方法来更复杂地重建页面布局。
  3. 图片大小:通过调整 insert_image() 的矩形区域,可以设置插入图片的大小。

此代码可以将原 PDF 文件中的文本和图片按顺序提取并重新创建成一个新的 PDF 文件。

相关文章:

如何用python将pdf转为text并提取其中的图片

要将 PDF 转为文本并提取其中的图片,可以使用 Python 的几个库来实现: PDF 转文本:使用 PyMuPDF 或 pdfplumber 来提取文本。提取图片:使用 PyMuPDF 或 pdf2image 来提取图像。 以下是实现的步骤和代码示例: 1. 安装…...

deepseek 导出导入模型(docker)

前言 实现导出导入deepseek 模型。deepseek 安装docker下参考 docker 导出模型 实际生产环境建议使用docker-compose.yml进行布局,然后持久化ollama模型数据到本地参考 echo "start ollama" docker start ollama#压缩容器内文件夹,然后拷贝…...

基于Redis 的分布式 session 图解

Redis 分布式 Session 工作原理 1. 传统 Session 的问题 在传统单服务器环境中,HTTP Session 存储在应用服务器的内存中。这在分布式系统中会导致问题: 用户的请求可能被分发到不同服务器,导致会话不一致服务器宕机会导致会话丢失需要依赖…...

Vue进阶之AI智能助手项目(四)——ChatGPT的调用和开发

AI智能助手项目 前端接口部分src/api/index.tssrc/utils/request/index.tspost方法httpHttpOptionsrc/utils/request/axios.tsLayout布局页面-viewsexception异常页面src/views/exception/404/index.vuesrc/views/exception/500/index.vueLayout布局页面src/views/chat/layout/…...

DeepSeek-R1本地部署保姆级教程

一、DeepSeek-R1本地部署配置要求 (一)轻量级模型 ▌DeepSeek-R1-1.5B 内存容量:≥8GB 显卡需求:支持CPU推理(无需独立GPU) 适用场景:本地环境验证测试/Ollama集成调试 (二&a…...

【deepseek】本地部署+webui访问

背景 最近deepseek很火,但是官网的老是被限流使用,还有就是自己也想着玩一玩,于是准备在自己电脑跑一个 直接附上结果地址mydeepseek 准备工作 windows和linux都可 我这里选择linux,ubuntu系统 安装ollama 看下图&#xff0…...

deepseek部署:ELK + Filebeat + Zookeeper + Kafka

## 1. 概述 本文档旨在指导如何在7台机器上部署ELK(Elasticsearch, Logstash, Kibana)堆栈、Filebeat、Zookeeper和Kafka。该部署方案适用于日志收集、处理和可视化场景。 ## 2. 环境准备 ### 2.1 机器分配 | 机器编号 | 主机名 | IP地址 | 部署组件 |-…...

博客系统笔记总结 2( Linux 相关)

Linux 基本使用和程序部署 基本命令 文件操作 显示当前目录下的文件 ls:显示当前目录下的文件 ll:以列表的形式展示,包括隐藏文件 进入目录 && 显示当前路径 cd:进入目录(后面跟相对路径或者绝对路径&…...

Flutter - 基础Widget

Flutter 中万物皆 Widget,基础Widget 同步对应 Android View. 普通文本 Text /*** 控制文本样式统一使用 style:TextStyle, 例:fontSize(字体大小),color(颜色),shadows(阴影)等等* 控制文本布局需单独设置:* textAlign(文不对齐方式)* te…...

如何在 Linux 上安装和配置 Zsh

文章目录 如何在 Linux 上安装和配置 Zsh1. 安装 Zsh1.1 在 Ubuntu/Debian 上安装1.2 在 CentOS/RHEL/Fedora 上安装1.3 在 Arch Linux 上安装1.4 验证 Zsh 安装 2. 设置 Zsh 为默认 Shell2.1 验证默认 shell 3. 配置 Zsh3.1 使用 Oh My Zsh3.1.1 安装 Oh My Zsh3.1.2 启用插件…...

【System Verilog and UVM基础入门26】Verdi使用教程指南

《Verdi使用教程指南 》 下载链接: https://download.csdn.net/download/TommiWei/90429701https://download.csdn.net/download/TommiWei/90429701 朋友你好,不管你是否使用过Verdi这款EDA仿真工具。 不管你是否还在寻找免费的使用教材。 不管你是否…...

3dtiles平移旋转工具制作

3dtiles平移旋转缩放原理及可视化工具实现 背景 平时工作中,通过cesium平台来搭建一个演示场景是很常见的事情。一般来说,演示场景不需要多完善的功能,但是需要一批三维模型搭建,如厂房、电力设备、园区等。在实际搭建过程中&…...

【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级

欢迎来到 CILMY23的博客 🏆本篇主题为:优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏: C | C语言 | 数据结构与算法 | Linux…...

数据开发面试:DQL,

DQL常见面试题 where 和 having 的区别 三个排序开窗函数的区别 left join 用where 筛选 和 用on筛选的区别 ON 子句:用于定义连接条件,不会丢失左表的行。 WHERE 子句:用于过滤连接后的结果集,可能会丢失左表中没有匹配的行 …...

学习Flask:Day 2:模板与表单开发

学习目标:前后端混合开发 # 添加模板渲染 from flask import render_templateapp.route(/profile) def profile():return render_template(profile.html, username"开发者",skills[Vue, JavaScript]) ✅ 实践任务: 创建templates目录 使用J…...

最长递增子序列(贪心算法)思路+源码

文章目录 题目[](https://leetcode.cn/problems/longest-increasing-subsequence/)算法原理源码总结题目 首先,要掌握动态规划加二分查找 算法原理 1.回顾dp的解法 状态表示:dp[i]表示:以i位置的元素为结尾的所有的子序列中,最长递增子序列的长度 状态转移方程:dp[i]= m…...

Orange 开源项目 - 集成百度智能云-千帆大模型

1 集成百度智能云-千帆大模型 百度智能云-千帆ModelBuilder百度智能云千帆大模型服务与开发平台ModelBuilder(以下简称千帆ModelBuilder)是面向企业开发者的一站式大模型开发及服务运行平台。千帆ModelBuilder不仅提供了包括文心一言底层模型和第三方开源…...

前缀和代码解析

前缀和是指数组一定范围的数的总和,常见的有两种,一维和二维,我会用两道题来分别解析 一维 DP34 【模板】前缀和 题目: 题目解析: 暴力解法 直接遍历数组,遍历到下标为 l 时,开始进行相加,直到遍历到下标为 r ,最后返回总和.这样做的时间复杂度为: O(n) public class Main …...

C 语言结构体:从入门到进阶的全面解析

一、结构体类型的声明 1.1 结构的声明 结构体是一种自定义的数据类型,允许将不同类型的数据组合成一个整体。声明语法如下: struct 结构体名 {数据类型 成员1;数据类型 成员2;// ... }; 示例: struct Student {char name[20];int age;fl…...

交换机与路由器连接方式

交换机和路由器连接的三种主要方式如下: 一、直连连接 这是最简单直接的连接方式。通过一根网线将交换机的一个端口与路由器的一个LAN端口相连。这种连接方式适用于小型网络,其中交换机负责局域网内部的数据交换,而路由器则负责将内部网络连接…...

自适应增强技术

1. 传统图像处理中的自适应增强&#xff08;如CLAHE&#xff09; 难度&#xff1a;⭐容易 实现方式&#xff1a;调用成熟的库&#xff08;如OpenCV&#xff09;函数即可完成。 示例代码&#xff08;CLAHE增强&#xff09;&#xff1a; <PYTHON> import cv2# 输入灰度或彩…...

【前端基础】Day 1 HTML

总结&#xff1a; 1. Web标准的构成 2. 基本标签 目录 1. Web标准的构成 2. 基本标签 2.1快捷键 2.2.1标题标签 2.2.2段落和换行标签 2.2.3文本格式化标签 2.2.4div和span标签 2.3.1 图像标签和路径 2.3.2路径 2.3.3超链接标签 2.4注释标签 2.5特殊字符 1. Web标准…...

【前端基础】Day 2 HTML

目录 1.表格标签 2.列表标签 3.表单标签 4.综合案例 5.查阅文档 1.表格标签 <body><table align"center" border"1" cellpadding"0" cellspacing"0" width"500" height"100"><thead> …...

Docker run --add-host参数解析(在容器启动时向/etc/hosts文件中添加自定义的主机名与IP映射)(适用于临时调试或测试)

文章目录 Docker run --add-host 参数解析一、参数概述二、工作原理三、应用场景1. **开发与调试**2. **环境隔离**3. **跨网络访问** 四、使用示例示例 1&#xff1a;单个自定义映射示例 2&#xff1a;多个映射同时使用 五、注意事项六、总结 Docker run --add-host 参数解析 …...

电商网站如何解决高并发问题

电商网站如何解决高并发问题&#xff1f;当下电商行业蓬勃发展&#xff0c;电商网站面临的用户访问量和高并发问题日益严峻。在电商大促、节日促销等关键时期&#xff0c;如何确保网站稳定运行&#xff0c;提升用户体验&#xff0c;成为了电商企业亟需解决的问题。小编推荐大家…...

MySQL 入门“鸡”础

一、Win10 与Ubuntu安装 以下是一篇针对 Ubuntu 安装 MySQL 的过程中写的示例&#xff1a; --- # Ubuntu 安装 MySQL 详细指南 在本教程中&#xff0c;我们将向您展示如何在 Ubuntu 上安装 MySQL&#xff0c;并完成基本的安全配置。以下是具体步骤&#xff1a; # 1. 安装 …...

若依前后端分离框架修改3.8.9版本(重点在安全框架讲解与微信小程序登录集成)

若依模板改造&#xff08;3.8.9&#xff09; 1、基础改造 下载代码 从[RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本](https://gitee.co…...

selenium爬取苏宁易购平台某产品的评论

目录 selenium的介绍 1、 selenium是什么&#xff1f; 2、selenium的工作原理 3、如何使用selenium&#xff1f; webdriver浏览器驱动设置 关键步骤 代码 运行结果 注意事项 selenium的介绍 1、 selenium是什么&#xff1f; 用于Web应用程序测试的工具。可以驱动浏览…...

kubernetes-完美下载

话不多说&#xff0c;直接开始从0搭建k8s集群 环境&#xff1a;centous7.9 2核 20G k8s-master 192.168.37.20 k8s-node1 192.168.37.21 k8s-node2 192.168.37.22 一&#xff1a;设置主机名 #设置主机名 hostnamectl set-hostname k8s-master hostnamectl set-h…...

PostgreSQL 常用函数

PostgreSQL 常用函数 在数据库管理系统中&#xff0c;函数是执行特定任务的基本构建块。PostgreSQL 是一个功能强大的开源关系数据库管理系统&#xff0c;提供了丰富的内置函数&#xff0c;这些函数极大地增强了数据库操作的能力。以下是一些在 PostgreSQL 中常用的函数&#…...