Python练手项目:PDF小工具-fitz版

Python利用fitz库提取pdf中的图片(针对多种类型pdf) 目录一. 安装fitz二. pdf文件格式问题2.1 pdf文件存在多种格式2.2 分析问题三. 代码 一. 安装fitz 安装:需要安装fitz和PyMuPDF,否则会报如下错误:ModuleNotFoundError: No module named ‘frontend’ pip install fitz PyMuPDF 二. pdf文件格式问题 2.1 pdf文件存在多种格式 pdf文件的格式有好几种,用Adobe Acrobat比较正常的如下所示: 这种类型的pdf文件可以比较正常地提取里面的图片 阅读详情

Python练手项目:PDF小工具-fitz版
python对办公一族来说,是个提高办公效率的得力利器。熟练使用它,可以轻松完成很多繁杂的事情。它可以轻松地操作Word、Excel、PDF这种文档。
今天需要整理一份资料,需要把多个pdf合并为一个,wps这些软件自然是有这个功能,但一般都是收费的,百度上也有很多网站,但资料上传到别人的网站,始终觉得还是不太可靠,故自己搜索了一下使用python来处理pdf文件,故此用tk制作了PDF小工具。
安装以下库:
python -m pip install -U pip
pip install PyMuPDF==1.19.0 -i https://pypi.mirrors.ustc.edu.cn/simple/
pdf_tool_fitz.py
源码如下:

#pip install PyMuPDF==1.19.0 -i https://pypi.mirrors.ustc.edu.cn/simple/
from pathlib import Path
import subprocess
import time
import sys
import tkinter as tk
from tkinter import ttk
import tkinter.filedialog as fd
import tkinter.messagebox as mb
import base64
import fitz
import threading

class PdfHandler:
    page_count=None
    page_index=None
    img_path=None
    def pdf_to_imgs(self,pdf_path,img_path,zoom_x,zoom_y,rotation_angle):
        '''
        pdf文件每页内容都转换成图片
        :param pdf_path:pdf文件的路径
        :param img_path:图像要保存的路径
        :param zoom_x:x方向的缩放系数
        :param zoom_y:y方向的缩放系数
            zoom_x和zoom_y一般取相同值,值越大,图像分辨率越高
        :param rotation_angle:旋转角度
        :return:
        '''
        # 如果没有存储文件的目录,则创建
        if not Path(img_path).exists():
            Path(img_path).mkdir()
            
        # 打开PDF文件
        with fitz.open(pdf_path) as pdf:
            self.page_count=pdf.page_count
            # 逐页读取PDF
            for page_index in range(0, pdf.pageCount):
                self.page_index=page_index
                page = pdf[page_index]
                # 设置缩放和旋转系数,zoom_x, zoom_y取相同值,表示等比例缩放
                trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotation_angle)
                pm = page.getPixmap(matrix=trans, alpha=False)
                self.img_path=f'{img_path}/{page_index}.png'
                self.img_path=self.img_path.replace('/',"\\")
                # 开始写图像
                pm.writePNG(self.img_path) # 第1张图片名:0.png,以此类推
                pm=None

    def imgs_to_pdf(self,img_path, new_pdf_name):
        '''
        将图片转为pdf
        :param imgPath: 图片路径
        :param new_pdf_name: 多张图片合并成的pdf文件名
        :return:
        '''
        with fitz.open() as doc:  # 新建一个空文档
            img_list=[]
            for item in Path(img_path).iterdir():
                img_list.append(item.name)
            for page_index in range(len(img_list)):
                self.page_index=self.page_index+1
                img = fitz.open(f'{img_path}/{page_index}.png')  # 打开图片
                pdfbytes = img.convertToPDF()  # 使用图片创建单页的 PDF
                with fitz.open("pdf", pdfbytes) as imgpdf:
                    doc.insert_pdf(imgpdf)
                img.close()
            doc.save(new_pdf_name)
    
    def imgs_2_pdf(self,old_pdf_names, new_pdf_name):
        '''
        将图片转为pdf
        :param imgPath: 图片路径
        :param new_pdf_name: 多张图片合并成的pdf文件名
        :return:
        '''
        with fitz.open() as doc:  # 新建一个空文档
            for old_pdf_name in old_pdf_names:
                img = fitz.open(old_pdf_name)  # 打开图片
                pdfbytes = img.convertToPDF()  # 使用图片创建单页的 PDF
                with fitz.open("pdf", pdfbytes) as imgpdf:
                    doc.insert_pdf(imgpdf)
                img.close()
            doc.save(new_pdf_name)
    
    def img_invert_img(self,old_img_name, new_img_name):
        '''
        将图片转为pdf
        :param imgPath: 图片路径
        :param new_pdf_name: 多张图片合并成的pdf文件名
        :return:
        '''
        with fitz.open() as doc:  # 新建一个空文档
            img = fitz.open(old_img_name)  # 打开图片
            pdfbytes = img.convertToPDF()  # 使用图片创建单页的 PDF
            with fitz.open("pdf", pdfbytes) as imgpdf:
                doc.insert_pdf(imgpdf)
            img.close()
            img = doc.get_page_images(0)[0]
            xref = img[0] #图片的xref编号,
            base = img[1] #图片的基本名字,比如 'img0'
            pix = fitz.Pixmap(doc, xref)
            if pix.n < 5:  # 这是一个灰度或者RGB图片
                pix.invertIRect()
                pix.writePNG(new_img_name)
            else:  # 这是一个CMYK图片
                pix1 = fitz.Pixmap(fitz.csRGB, pix)
                pix1.invertIRect()
                pix1.writePNG(new_img_name)
                pix1 = None
            pix = None
            '''
            pm=doc[0].getPixmap(dpi=600,alpha=False)
            pm.invertIRect()
            pm.writePNG(new_img_name)
            pm=None
            '''
    
    def merge_pdfs(self,old_pdf_names,new_pdf_name):
        '''
        从pdf文件合成为新的pdf文件
        :param old_pdf_names: pdf文件名数组
        :param new_pdf_name: 合并出的新pdf文件名
        :return:
        '''
        print(old_pdf_names)
        print(new_pdf_name)
        file_writer = fitz.open()
        for pdf in old_pdf_names:
            file_reader = fitz.open(pdf)# 循环读取需要合并pdf文件
            file_writer.insert_pdf(file_reader)
            file_reader.close()
        file_writer.save(new_pdf_name)
        file_writer.close()
   
    def split_pdf(self,old_pdf_name, new_pdf_name, from_page, to_page):
        '''
        从pdf文件中拆分出部分,拆出部分成为新的pdf文件
        :param old_pdf_name: 原pdf文件名
        :param new_pdf_name: 拆分后合并出的新pdf文件名
        :param from_page: 原pdf文件起始页码索引(0开始,默认0)
        :param to_page: 原pdf文件结尾页码索引(0开始,默认最后一页)
        :return:
        '''
        with fitz.open(old_pdf_name) as old_pdf, fitz.open() as new_pdf:
            print(f"从:{from_page}")
            to_page-=1
            print(f"到:{to_page}")
            new_pdf.insert_pdf(old_pdf,from_page,to_page)
            new_pdf.save(new_pdf_name)
            
    def get_pdf_text(self,pdf_path):
        '''
        获取每页pdf文件文本
        :param pdf_path: pdf文件路径
        :return:
        '''
        # 打开pdf文件,并新建html文件
        with fitz.open(pdf_path) as pdf:

            # 遍历每一页pdf,并显示进度条
            for page in pdf:
                text = page.get_text() #提取文本,传入参数'html'即:page.get_text('html') 则提取每页内容为html
            print(f'第{page+1}页解析内容:\n{text}')
    
    def get_pdf_images(self,img_path,pdf_path):
        '''
        获取每页pdf文件所有图片
        :param pdf_path: pdf文件路径
        :return:
        '''
        # 如果没有存储文件的目录,则创建
        if not Path(img_path).exists():
            Path(img_path).mkdir()
        doc = fitz.open(pdf_path)
        self.page_count=doc.page_count
        page_index=0
        for i in range(len(doc)):
            self.page_index=i
            for img in doc.get_page_images(i):
                xref = img[0] #图片的xref编号,
                #base = img[1] #图片的基本名字,比如 'img0'
                pix = fitz.Pixmap(doc, xref)
                self.img_path=f"{img_path}/{page_index}.png"
                if pix.n < 5:  # 这是一个灰度或者RGB图片
                    pix.writePNG(self.img_path)
                else:  # 这是一个CMYK图片
                    pix1 = fitz.Pixmap(fitz.csRGB, pix)
                    pix1.writePNG(self.img_path)
                    pix1 = None
                pix = None  # 让图片像素图清除内存
                page_index+=1
        doc.close()

# 防止字符串乱码
# os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
data=[]
id=0
mydir='D:/'
kind='PDF'
PdfHandler=PdfHandler()

def thread_it(func,args):
	'''将函数打包进线程'''
	# 创建
	t = threading.Thread(target=func, args=args)
	# 守护 !!!
	t.setDaemon(True)
	# 启动
	t.start()
	# 阻塞--卡死界面!
	# t.join()

def base64_to_image(base64_string, image_path):
    base64_data = base64_string.encode("utf-8")
    image_data = base64.b64decode(base64_data)
    with open(image_path, "wb") as image_file:
        image_file.write(image_data)

base64_string = '''
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
三种方法,Python轻松提取PDF中全部图片 有时我们需要将一份或者多份PDF文件中的图片提取出来,如果采取在线的网站实现的话又担心图片泄漏,手动操作又觉得麻烦,其实用Python也可以轻松搞定! 今天就跟大家系统分享几种Python提取 PDF 图片的方法。其实没有非常完美的方法,每种方法提取效率都不是百分之百,因此可以考虑用多种方法进行互补,主要将涉及: 基于fitz库和正则搜索提取图片 基于pdf2image库的两种方法提取图片 基于fitz库和正则搜索 fitz是pymupdf的子模块,需要先用命令行安... 阅读详情

相关推荐

python 使用 PyMuPDF (fitz) 处理 PDF 文档

PyMuPDF 是一个功能强大且高效的 Python PDF 处理库,它基于 MuPDF 引擎,提供了丰富的 PDF 操作功能。PyMuPDF 以其出色的性能(比其他库快5-10倍)和丰富的功能成为处理PDF的首选。对于需要高性能PDF处理的场景,它是最佳选择。

qq_52718394的博客 1775

Python fitz模块导入出错的解决

Fitz导入出错的解决 首先需要安装pyMuPdf模块,用缺省的pip install pymupdf安装时,安装的版本无法使用,需要到https://pypi.org/project/PyMuPDF/#files下载最新版本,然后手动安装:比如windows 64bit,Python 3.7,可以先下载:PyMuPDF-1.17.1-cp37-cp37m-win_amd64.whl 到本地,然后定位到文件位置后 pip install PyMuPDF-1.17.1-cp37-cp37m-win_am

jerryshen888的博客 1万+

python将图片转换为PDF文件

工作中需要将众多图片转换为PDF文件,在线的各种工具又感觉不是很安全,于是就想到用python写一个小工具, 完成批量图片转换PDF功能。 主要使用python的fitz插件,通过在命令行输入pip install fitz完成安装,由于该资源比较大,建议对python的下载源 进行更改,安装过程有报错,不过不影响使用。更改方式参照: windows下,在user目录中创建一个pip目录,如C:\Users\xx\pip,新建文件pip.ini,内容如下: [glo...

u012034742的专栏 1万+

fitz 提取pdf表格

fitz实现 pdf剪裁

every place is the center of the universe 1606

PDF文件的读取 - pdfplumber和fitz(PyMuPDF)

本文根据是pdfplumber和fitz对于pdf的最新最准确的读取方式,由于在真实的项目中,需要处理来自与post请求提取的表单数据,该类型是bytes格式的pdf文件,而网上对于该类型pdf的读取介绍甚少,故本文在详细阅读了pdfplumber和fitz的官方文档后,总结了读取pdf对象的方法

putdoor的博客 8255

从‘pip install fitz失败’到‘import fitz成功’:一份给Python小白的PDF处理库避坑指南

本文详细解析了Python中处理PDF时常见的'pip install fitz'失败问题,揭示了fitz与PyMuPDF的关系,并提供了正确的安装方法和常见问题解决方案。通过本指南,Python新手可以顺利安装PyMuPDF并使用import fitz进行PDF操作,包括文本提取、页面渲染等实用功能。

weixin_30823001的博客 526

Python - PyMuPDF (fitz) 处理 PDF

关于 PyMuPDF 安装 使用 将 PDF 分解、逐张转图片

AI工程化、开源分享、文档翻译、代码笔记 4462

从零开始:在Ubuntu 22.04上配置Isaac Gym Preview 3环境(含常见错误解决方案)

本文提供了在Ubuntu 22.04系统上从零开始配置Isaac Gym Preview 3环境的完整实战指南。内容涵盖NVIDIA驱动安装、Conda环境搭建、CUDA与PyTorch版本精准匹配、Isaac Gym核心安装与验证,并重点介绍了针对四足机器人等复杂系统的强化学习训练环境配置、常见错误解决方案及性能调优技巧,旨在帮助开发者高效部署这一高性能物理仿真平台。

weixin_29048775的博客 393

泛微OA表单开发实战:如何用JavaScript动态控制明细表的必填与可编辑属性

本文详细介绍了如何在泛微OA系统中使用JavaScript动态控制明细表字段的必填与可编辑属性。通过主表字段变更事件监听和明细表字段属性批量修改,实现智能化的表单交互,提升用户体验和系统灵活性。文章深入解析了关键API的使用方法,并提供了实战代码示例和最佳实践。

weixin_30955617的博客 550

【可信数据空间-部署方案】

此部署架构体现了以下几个核心原则:去中心化: 数据存储和处理完全分布在各个参与者端,运营方只提供核心的协调和信任基础设施。安全边界清晰: 通过VPC、DMZ、防火墙、K8s命名空间等技术,在每个层级都建立了严格的安全边界。高可用与弹性: 所有关键服务均以集群方式部署,避免单点故障,并能根据负载动态伸缩。云原生: 全面采用容器化和Kubernetes编排,简化部署、管理和运维复杂度。合规性: 架构设计天然满足数据驻留要求(数据留在企业本地),并为所有操作提供不可篡改的审计追踪能力。

u014716614的博客 772

Jetson Nano(1)——笔记本电脑控制

笔记本电脑控制Jetson Nano没有显示屏如何控制Jetson Nano一、使用ssh客户端连接到Jetson Nano的命令端1.将电脑的网线口和jetson nano的网线口通过网线连接2.在控制面版中打开“更改配适器设置”3.查找jetson nano的ip地址4.利用putty链接二、远程桌面配置 没有显示屏如何控制Jetson Nano Jetson Nano相当于一个微型电脑,能快...

weixin_43619070的博客 1万+

STM32超声波避障小车硬件设计与实时测距实现

超声波测距是嵌入式系统中经典的环境感知技术,其原理基于声波在空气中的传播时间与距离的线性关系,通过精确计时实现非接触式距离测量。该技术具备成本低、抗光干扰强、算法简洁等优势,广泛应用于智能小车、机器人避障、液位监测等场景。工程落地的关键在于硬件信号完整性(如5V/3.3V电平匹配)、微秒级定时精度(依赖高稳定外部晶振与输入捕获模式)以及强干扰环境下的数据鲁棒性(需软硬协同滤波)。本文以STM32F103C8T6为平台,深入解析HC-SR04模块的时序闭环控制、TIM3输入捕获双沿测量、L298N电机状态机驱

weixin_42578963的博客 297

智能车竞赛独轮组信标灯系统全解析:从硬件选型到实战调试

本文全面解析了智能车竞赛独轮组信标灯系统的核心原理与实战应用。从硬件架构(灯板、灯罩、控制器)的深度剖析,到红外信号(特别是40kHz调制信号)的接收与解码策略,再到车模的灭灯机构设计与路径规划,提供了从硬件选型到软件调试的全链路指南。文章重点分享了实战调试技巧与常见问题排查方法,旨在帮助参赛队伍深入理解系统,提升车模的识别精度与比赛表现。

e4f5g6h的博客 1124

基于 FPGA Vivado 信号发生器设计(附源工程)

今天给大侠带来基于 FPGA Vivado 信号发生器设计,开发板实现使用的是Digilent basys 3,如有想要入手basys3开发板的,可以联系牛总:18511371833。话不多说,上货。 本篇掌握基于 FPGA Vivado 信号发生器设计(附源工程),掌握基于添加文件和IP的Vivado工程设计流程,掌握基于Tcl的Vivado工程设计流程,学习信号发生器的基本组成结构。获取本篇相关源工程代码,可在公众号内回复“信号发生器设计源工程”。 设计原理 信号发生器...

7991

锂电池寿命预测 | Python实现基于LSTM长短期记忆神经网络的锂电池寿命预测

锂电池寿命预测 | Python实现基于LSTM长短期记忆神经网络的锂电池寿命预测

算法如诗的博客 1902

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: Python tk 仿excel表格
下一篇: DeepSeek-R1 免费本地部署 和 Python 调用
小6哥
博客等级 码龄18年 16粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值