文章目录

  • 安装与简介
    • MuPDF
    • PyMuPDF
  • PyMuPDF使用
    • 元数据
    • 页面Page
  • 代码示例
    • PDF转图片
    • 图片转PDF
    • PDF转PPT

PyMuPDF提供了PDF及流行图片处理接口。

安装与简介

安装:pip install PyMuPDF

PyMuPDF使用手册参见https://pymupdf.readthedocs.io/en/latest/index.html

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字典。

Key Value
producer producer (producing software)
format format: ‘PDF-1.4’, ‘EPUB’, etc.
encryption encryption method used if any
author 作者
modDate 最后修改日期
keywords 关键字
title 标题
creationDate 创建日期
creator creating application
subject subject

页面Page

页面是MuPDF的核心:
• 可以将页面呈现为光栅或矢量(SVG)图像,可以选择缩放、旋转、移动或剪切页面。
• 可以提取多种格式的页面文本和图像,并搜索文本字符串。
• 对于PDF文档,可以使用更多的方法向页面添加文本或图像。

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

  • 第一页为0;
  • 负数表示从末尾倒数:如doc[-1]表示获取最后一页;
# pno是页面索引
page = doc.load_page(pno)
# or
page = 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 = 0os.makedirs(storePath, exist_ok=True)images = []print(f"To convert: {pdfFile}")for pg in range(doc.page_count):page = doc[pg]index += 1rotate = int(0)print(f"\tconvert page {index}")# 每个尺寸的缩放系数(提高生成分辨率)zoom_x, zoom_y = zoom, zoommat = 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
使用文档:https://python-pptx.readthedocs.io/en/latest/index.html

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

import fitz
import pptx
from 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]PDF文件与图片转换(PyMuPDF)及转PPT相关推荐

  1. 图片弄成pdf怎么弄?怎么把图片做成pdf文件?图片转换成pdf格式的软件?

    有时候我们需要把图片转成pdf.可能还有些小伙伴不知道怎么去完成这项转换的,图片转pdf其实很简单,下面给大家分享一个超级简单的图片转pdf方法: 搜索一下:~~~~~~轻云pdf编辑压缩官网 打开网 ...

  2. Python怎么将pdf转为图片?Python如何实现pdf文件转图片

    而pdf则是用来保存一些内容已经确定好的数据,因为pdf是无法直接修改内容的,所以也会经常将pdf转为图片来保存.本文就将会来介绍一下pdf转图片的方法,往下看看吧. 1.pdf转图片的话主要实现所需 ...

  3. python成功将PDF文件转为图片,一次成功,不再踩坑!

    网上有很多方法,但是包括PDF2image库.PyMupdf库等. 在摸索过程中我发现pdf的解析可以分为两种: 1.标准的PDF文件 表现在字体清晰.无畸变.这类PDF文件是通过word等格式编辑好 ...

  4. Python PDF文件转Word格式

    1.免费在线转换网站 PDF转换器,限制50页: http://pdfdo.com/pdf-to-word.aspx 迅捷PDF转换器,限制2M: http://app.xunjiepdf.com/p ...

  5. tif文件转pdf_PPT怎么转换成PDF文件?可以帮到你的PPT转PDF方法

    PPT怎么转换成PDF文件?大家在平时的工作与学习中肯定接触且使用过PPT.PDF这两种格式的文件,随之就会有将PPT转换成PDF文件的需求.这是由于PPT文件兼容性比较差,不同设备打开文件的效果不同 ...

  6. pdf转图片 java_有将pdf文件转图片的格式方法吗?

    有时候我们为了方便传输,需要把图片转为PDF的格式,因为它所占的空间相对要小.但是因为pdf文件的安全性很好所以不能进行编辑,那我们又要进行编辑图片的时候,就又会把PDF文件格式转换成图片来进行编辑. ...

  7. Java实现pdf文件转图片

    Java实现pdf文件转图片 文章顺序是按照测试类- -Service- -Service实现类- -工具类- - POM依赖. test测试类里 pdfPath:存放pdf源文件的地方 imgflo ...

  8. 前端PDF文件转图片方法(你值得收藏)

    前端PDF文件转图片方法(你值得收藏) 第一步:先下载pdfjs,网址:PDF下载地址,再引入到项目中,我是标签直接引用的 <script src="pdfjs/build/pdf.j ...

  9. 上传pdf文件转图片翻页小工具,遇到JSP form中type=file的文件上传及后台Part处理问题(后台取值为null)

    最近公司要求做一个上传pdf文件后将文件转换为翻页图片的小工具,我是这么做的 1.先找图片翻页的demo,微软有现有的产品turn.js感兴趣的可以自己看一下 ,有双页的有单页的,因为我司要求手机端使 ...

最新文章

  1. [转]用android LinearLayout和RelativeLayout实现精确布局
  2. Spring Cloud(5)---基于 Spring Cloud 完整的微服务架构实战
  3. Machine Learning - Coursera week5 cost function and backpropagation 1
  4. python如何定义类_Python class定义类,Python类的定义(入门必读)
  5. 在Eclipse中实现C++ 11的完整支持
  6. 河北2021高考成绩查询具体时间,2021河北高考时间具体安排表
  7. 机器学习之KNN 算法
  8. 开源的工业软件-面向生产控制环节
  9. python如何截长图_Python网页截图/屏幕截图/截长图如何实现?
  10. Android创建快捷方式-SHORTCUT
  11. 【JAVA SE基础篇】29.初识数组
  12. directshow视频旋转90度
  13. Win32窗口--XBox游戏手柄--C++--方向轮和按键捕获
  14. linux防火墙reject,Iptables 扩展动作 Reject Mark
  15. VB.Net - 指令
  16. kettle 教程(四):自定义 Java 代码
  17. Python超市管理系统毕业设计源码111042
  18. Linux 入门视频教程
  19. C语言——leetcode69——X的平方根
  20. python实现图(卖芒果)

热门文章

  1. php论坛源码登录破解,MDClub轻量级php论坛源码
  2. ensp二,三层交换机配置实验
  3. Throwing OutOfMemoryError “pthread_create (1040KB stack) failed: Try again“
  4. 有哪些野路子电脑技能让非程序员感到神奇?
  5. MATLAB十进制转其它进制的代码
  6. 农业生产适宜性评价之环境资源评价算法
  7. AR导览智慧旅游解决方案-广东海狸信息科技
  8. 大数据基础及应用试题分析
  9. php shopping_PHP实现购物网站实例详解
  10. 低EMI的DCDC设计