广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python PyMuPDF如何实现PDF与图片和PPT相互转换
  • 909
分享到

Python PyMuPDF如何实现PDF与图片和PPT相互转换

2023-07-04 20:07:46 909人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了python PyMupdf如何实现PDF与图片和PPT相互转换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python PyMuPDF如何实现PDF与图片和PPT相互转

这篇文章主要介绍了python PyMupdf如何实现PDF与图片和PPT相互转换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python PyMuPDF如何实现PDF与图片和PPT相互转换文章都会有所收获,下面我们一起来看看吧。

安装与简介

安装:pip install PyMuPDF

MuPDF

MuPDF是一个轻量级的PDF、XPS和电子书查看器。MuPDF由软件库、命令行工具和各种平台的查看器组成:

  • 支持多种文档格式:如PDF、XPS、OpenXPS、CBZ、EPUB和FictionBook 2。

  • 命令行工具可注释、编辑文档,并将文档转换为其他格式:如html、SVG、PDF和CBZ。

PyMuPDF

PyMuPDF是MuPDF的Python接口库:

  • 可访问扩展名为“.pdf”、“.xps”、“.oxps”、“.cbz”、“.fb2”或“.epub”的文档;

  • 可像文档样处理流行图像格式:“.png”,“.jpg”,“.bmp”,“.tiff”等

对于所有支持的文档类型可以:

解密文件

访问元信息、链接和书签

以栅格格式(PNG和其他格式)或矢量格式SVG呈现页面

搜索文本

提取文本和图像

转换为其他格式:PDF, (X)HTML, XML, JSON, text

对于PDF文档,存在大量的附加功能,可以:创建、合并或拆分。页面可以通过多种方式插入、删除、重新排列或修改(包括注释和表单字段)。

可以提取或插入图像和字体

完全支持嵌入式文件

pdf文件可以重新格式化,以支持双面打印,色调分离,应用标志或水印

完全支持密码保护:解密、加密、加密方法选择、权限级别和用户/所有者密码设置

支持图像、文本和绘图的PDF可选内容概念

可以访问和修改低级PDF结构

PyMuPDF使用

通过open可打开文档(Document对象):

import fitzdoc = fitz.open(filename)# ...doc.save('file')doc.close()

Document中发主要方法与属性:

方法/属性描述
Document.page_count页数 (int)
Document.metadata元数据 (dict)
Document.get_toc()获取目录 (list)
Document.load_page()读取页面

对于PDF文档,有以下页面操作方法:

  • 删除页面:Document.delete_page()和Document.delete_pages()

  • 复制或移动页面:Document.copy_page()、Document.fullcopy_page()和Document.move_page()

  • 选择页面(只保留选择范围内的页面):Document.select()

  • 插入新页:Document.insert_page()和Document.new_page(),以及Document.insert_pdf()

元数据

Document.metadata是一个具有以下键的Python字典。

KeyValue
producerproducer (producing software)
fORMatformat: ‘PDF-1.4’, ‘EPUB’, etc.
encryptionencryption method used if any
author作者
modDate最后修改日期
keyWords关键字
title标题
creationDate创建日期
creatorcreating application
subjectsubject

页面Page

页面是MuPDF的核心:

• 可以将页面呈现为光栅或矢量(SVG)图像,可以选择缩放、旋转、移动或剪切页面。

• 可以提取多种格式的页面文本和图像,并搜索文本字符串

• 对于PDF文档,可以使用更多的方法向页面添加文本或图像。

从Document中获取页面,页面索引

第一页为0;

负数表示从末尾倒数:如doc[-1]表示获取最后一页;

# pno是页面索引page = doc.load_page(pno) # orpage = doc[pno]

页面操作方法:

page.get_links():获取页面中的连接(返回字典);

page.annots():获取注释;

page.widgets():获取表单;

pix = page.get_pixmap():获取光栅图像(整个页面作为一个图像);

pix.save('page.jpg'):保存为图像;

page.get_svg_image():获取矢量图像;

page.get_text(opt):获取文本,opt可为:

  • “text”:(默认)带换行符的纯文本(无格式、无文字位置详细信息、无图像);

  • “blocks”:生成文本块(段落)的列表;

  • “words”:生成单词列表(不包含空格的字符串);

  • “html”:创建页面的完整视觉版本,包括任何图像;

  • “dict”/“json”:与HTML相同的信息级别,但作为Python字典或JSON字符串。

  • “rawdict”/“rawjson”:“dict”/"json"的超级集合。它还提供诸如XML之类的字符详细信息。

  • “xhtml”:文本信息级别与文本版本相同,但包含图像。

  • “xml”:不包含图像,但包含每个文本字符的完整位置和字体信息,使用XML模块进行解释。

page.search_for("txt"):搜索文本

代码示例

PDF转图片

通过get_pixmap获取每页PDF为图片,然后保存即可。其中zoom用于控制生成图片的缩放比例。

import fitzdef pdf2image(pdfFile, storePath, zoom=2.0):    doc = fitz.open(pdfFile)    picName = os.path.splitext(os.path.basename(pdfFile))[0]    index = 0    os.makedirs(storePath, exist_ok=True)    images = []    print(f"To convert: {pdfFile}")    for pg in range(doc.page_count):        page = doc[pg]        index += 1        rotate = int(0)        print(f"\tconvert page {index}")        # 每个尺寸的缩放系数(提高生成分辨率)        zoom_x, zoom_y = zoom, zoom        mat = fitz.Matrix(zoom_x, zoom_y)        pm = page.get_pixmap(matrix=mat, alpha=False)        imgName = '{}-{}.jpg'.format(picName, index)        imgFile = os.path.join(storePath, imgName)        pm.save(imgFile)        images.append(imgFile)    doc.close()    return images

图片转PDF

把图片插入到新建页中(插入位置使用页面框,即填充整个页面)

def image2pdf(imgDir, pdfFile, width=595, height=842):    doc = fitz.open()    print("To convert image to PDF:")    for img in sorted(glob.glob("{}/*".format(imgDir))):        print(f"\tAdd image {img}")        page = doc.new_page(width=width, height=height)        page.insert_image(page.rect, filename=img)  # 将当前页插入文档    doc.save(pdfFile)    print(f"PDF save to {pdfFile}")    doc.close()

PDF转PPT

转PPT时需要用到pptx库:pip install python-pptx

先把PDF转为图片,然后把每张图片生成一个幻灯片页面(PPT页面大小有width与height控制)

import fitzimport pptxfrom pptx.util import Inchesdef pdf2pptx(pdfFile, pptFile, imgPath, width=10, height=7.5, zoom=2.0):    images = pdf2image(pdfFile, imgPath, zoom)    ppt = pptx.Presentation()    for i in images:        layout = ppt.slide_layouts[0]  # 定义一个PPT页面样式        slide = ppt.slides.add_slide(layout)        slide.shapes.add_picture(            image_file=i,            left=Inches(0),            top=Inches(0),            width=Inches(width),            height=Inches(height)        )    ppt.save(pptFile)    shutil.rmtree(imgPath)

关于“Python PyMuPDF如何实现PDF与图片和PPT相互转换”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python PyMuPDF如何实现PDF与图片和PPT相互转换”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网Python频道。

--结束END--

本文标题: Python PyMuPDF如何实现PDF与图片和PPT相互转换

本文链接: https://www.lsjlt.com/news/347402.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python PyMuPDF如何实现PDF与图片和PPT相互转换
    这篇文章主要介绍了Python PyMuPDF如何实现PDF与图片和PPT相互转换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python PyMuPDF如何实现PDF与图片和PPT相互转...
    99+
    2023-07-04
  • PythonPyMuPDF实现PDF与图片和PPT相互转换
    目录安装与简介MuPDFPyMuPDFPyMuPDF使用元数据页面Page代码示例PDF转图片图片转PDFPDF转PPT文章目录 安装与简介MuPDFPyMuPDF PyMuPDF使...
    99+
    2022-12-23
    Python PyMuPDF Python PDF转图片 Python PDF转PPT
  • Python 图片与pdf相互转换
    使用到第三方库 PyMuPDF 在 python 环境下对 PDF 文件的操作。 PDF 转为图片 需新建文件夹 pdf2png import fitz import glob def rightinput(desc): ...
    99+
    2023-01-31
    图片 Python pdf
  • Android实现excel/pdf/word/odt/图片相互转换
    目录实践过程pdf转excelexcel转pdfppt转pdfpdf转pptpdf转wordword转pdfexcel转图片pdf转图片odt转pdf实践过程 pdf转excel p...
    99+
    2023-05-15
    Android excel pdf word odt图片转换 Android excel pdf word odt 图片 Android excel Android pdf Android word
  • Android怎么实现excel/pdf/word/odt/图片相互转换
    本篇内容主要讲解“Android怎么实现excel/pdf/word/odt/图片相互转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么实现excel/pdf/word/odt...
    99+
    2023-07-06
  • Python实现图片和视频的相互转换
    目录使用背景一、视频转图像二、图像转视频使用背景 有时候我们需要把很多的图片合成视频,或者说自己写一个脚本去加快或者放慢视频; 也有时候需要把视频裁剪成图片,进行后续操作。 这里提供...
    99+
    2022-11-12
  • Python怎么实现图片和视频的相互转换
    本篇内容主要讲解“Python怎么实现图片和视频的相互转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现图片和视频的相互转换”吧!使用背景有时候我们需要把很多的图片合成视频,...
    99+
    2023-06-22
  • Java图片与二进制相互转换怎么实现
    这篇文章主要介绍了Java图片与二进制相互转换怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java图片与二进制相互转换怎么实现文章都会有所收获,下面我们一起来看看吧。1、下面是一个完整的代码示例指定文...
    99+
    2023-07-05
  • 关于JAVA11中图片与BASE64相互转换的实现
    由于jdk 1.8 之后sun.misc 包下的 BASE64Decode的依赖 被移除 我们需要在自己的项目中引入EncodeUtils 工具类 帮助我们进行转换 public...
    99+
    2022-11-12
  • JAVA11中图片与BASE64相互转换的实现方法
    这篇文章主要介绍了JAVA11中图片与BASE64相互转换的实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。常用的java框架有哪些1.SpringMVC,Spring...
    99+
    2023-06-14
  • JS中base64和图片如何互相转换
    这篇文章将为大家详细讲解有关JS中base64和图片如何互相转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。js将图片转化为base64var img&nbs...
    99+
    2022-10-19
  • Python怎么将pdf转为图片?Python如何实现pdf文件转图片
    而pdf则是用来保存一些内容已经确定好的数据,因为pdf是无法直接修改内容的,所以也会经常将pdf转为图片来保存。本文就将会来介绍一下pdf转图片的方法,往下看看吧。 1.pdf转图片的话主要实现所需要的模块叫做PyMuPDF,它就是用来...
    99+
    2023-09-02
    python Powered by 金山文档
  • Java图片与二进制相互转换实现示例讲解
    目录1、下面是一个完整的代码示例2、如何判断 base64 图片的格式3、将网络图片转为 base64 字符串4、将 base64 字符串转为图片输出5、将文件转为 base64 字...
    99+
    2023-03-19
    Java图片与二进制转换 Java图片转换二进制
  • python opencv实现灰度图和彩色图的互相转换
    目录opencv灰度图和彩色图互相转换注意:附:python将灰度图转换为RGB彩色图总结opencv灰度图和彩色图互相转换 如果摄像头本来就得到3维度红外图那就不用处理直接可以用:...
    99+
    2022-11-13
  • Java项目中如何将图片与base64 编码相互转换
    这期内容当中小编将会给大家带来有关Java项目中如何将图片与base64 编码相互转换,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。代码:public static boolean&n...
    99+
    2023-05-31
    java base64 相互
  • python中CURL和python requests的相互转换如何实现
    今天小编给大家分享一下python中CURL和python requests的相互转换如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,...
    99+
    2023-07-05
  • 如何使用python opencv实现灰度图和彩色图的互相转换
    这篇文章将为大家详细讲解有关如何使用python opencv实现灰度图和彩色图的互相转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。opencv灰度图和彩色图互相转换如果摄像头本来就得到3维...
    99+
    2023-06-28
  • SQL如何实现横表与纵表相互转换
    目录一、横表简单概述二、纵表简单概述三、纵表转横表代码如下以及视图展示四、横表转纵表代码如下以及视图展示五、横表、纵表优点与缺点六、总结一、横表简单概述 横表是普通的建表方式。例如:表结构为主键、字段1、字段2、字段3&...
    99+
    2023-04-24
    SQL 横表与纵表转换 SQL 横表与纵表
  • 如何用ADO.NET实现txt与Excel的互相转换
    本篇文章为大家展示了如何用ADO.NET实现txt与Excel的互相转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在园子里看过很多文章,关于设计模式,关于架构等等,我在这里谈谈一些软件的功能,为...
    99+
    2023-06-17
  • Java BeanMap如何实现Bean与Map的相互转换
    本篇内容主要讲解“Java BeanMap如何实现Bean与Map的相互转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java BeanMap如何实现Bean与Map的相...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作