百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python将PDF转为png图像(python如何把pdf转成excel)

zhezhongyun 2025-04-11 09:46 15 浏览

最近开发办公类相关项目,在办公类项目不可避免的就是处理 Excel、Word、Pdf 之类的文档,需要将文档格式进行转换,以便于显示、打印等的需要。今天,我们来看一下 PDF 文档转换为 png 图像的方法,便于在项目中没有好的显示 PDF 文档的方法下通过转换为 png 图像进行显示。

1.PyMuPDF 简介

在介绍 PyMuPDF 之前,先来了解一下 MuPDF,从命名形式中就可以看出,PyMuPDF 是 MuPDF 的 Python接口形式。

1.1MuPDF

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

MuPDF 中的渲染器专为高质量抗锯齿图形量身定制。它以精确到像素的几分之一内的度量和间距呈现文本,以在屏幕上再现打印页面的外观时获得最高保真度。

这个观察器很小,速度很快,但是很完整。它支持多种文档格式,如PDF、XPS、OpenXPS、CBZ、EPUB和FictionBook 2。您可以使用移动查看器对 PDF 文档进行注释和填写表单(这个功能很快也将应用于桌面查看器)。

命令行工具允许您注释、编辑文档,并将文档转换为其他格式,如HTML、SVG、PDF和CBZ。您还可以使用Javascript编写脚本来操作文档。

1.2PyMuPDF

PyMuPDF 是支持 MuPDF 的Python绑定。

使用 PyMuPDF,你可以访问扩展名为“.pdf”、“.xps”、“.oxps”、“.cbz”、“.fb2”或“.epub”。此外,大约10种流行的图像格式也可以像文档一样处理:“.png”,“.jpg”,“.bmp”,“.tiff”等。

2.PyMuPDF 安装

使用 pip 安装命令:

python -m pip install --upgrade pip
python -m pip install --upgrade pymupdf

除了标准库,它没有强制性的外部依赖项。只有在安装了某些包时,才会有一些不错的方法

  • Pillow:当使用 Pixmap.pil_save() 和 Pixmap.pil_tobytes() 时需要
  • fontTools:当使用 Document.subset_fonts() 时需要
  • pymupdf-fonts 是一个不错的字体选择,可以用于文本输出方法

导入库:

import fitz

查看版本:

import fitz
print(fitz.__doc__)

3.使用 PyMuPDF

3.1打开文档

doc = fitz.open(filename)  # or fitz.Document(filename)

返回 Document 对象。

3.2 Document 的一些方法和属性

Method / Attribute

Description

Document.page_count

页数 (int)

Document.metadata

元数据 (dict)

Document.get_toc()

目录 (list)

Document.load_page()

读取页面

3.3 元数据

Key

Value

producer

producer (producing software)

format

format: ‘PDF-1.4’, ‘EPUB’, etc.

encryption

encryption method used if any

author

author

modDate

date of last modification

keywords

keywords

title

title

creationDate

date of creation

creator

creating application

subject

subject

3.4 使用目录大纲

toc = doc.get_toc()

3.5 使用页面

获取某页面:

page = doc.load_page(pno)  # loads page number 'pno' of the document (0-based)
page = doc[pno]  # the short form

迭代页面:

for page in doc:
    # do something with 'page'

# ... or read backwards
for page in reversed(doc):
    # do something with 'page'

# ... or even use 'slicing'
for page in doc.pages(start, stop, step):
    # do something with 'page'

3.6 呈现页面

获取页面内容的图像:

pix = page.get_pixmap()

3.7 保存页面为图像文件

pix.save("page-%i.png" % page.number)

4.示例代码

将 pdf 文件的每一页转换为 png 图像,代码如下:

# coding: utf-8
import sys
import fitz


# pdffilename 表示 PDF 文件名,全路径名
def arc2pdf(pdffilename: str):
    doc = fitz.open(pdffilename)
    for i in range(0, doc.page_count):
        page = doc.load_page(i)
        pix = page.get_pixmap()
        pix.save("%s._%i.png" % (pdffilename, page.number))


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('参数错误!')
        sys.exit(0)

    pdffilename=sys.argv[1]
    arc2pdf(pdffilename)



相关推荐

JPA实体类注解,看这篇就全会了

基本注解@Entity标注于实体类声明语句之前,指出该Java类为实体类,将映射到指定的数据库表。name(可选):实体名称。缺省为实体类的非限定名称。该名称用于引用查询中的实体。不与@Tab...

Dify教程02 - Dify+Deepseek零代码赋能,普通人也能开发AI应用

开始今天的教程之前,先解决昨天遇到的一个问题,docker安装Dify的时候有个报错,进入Dify面板的时候会出现“InternalServerError”的提示,log日志报错:S3_USE_A...

用离散标记重塑人体姿态:VQ-VAE实现关键点组合关系编码

在人体姿态估计领域,传统方法通常将关键点作为基本处理单元,这些关键点在人体骨架结构上代表关节位置(如肘部、膝盖和头部)的空间坐标。现有模型对这些关键点的预测主要采用两种范式:直接通过坐标回归或间接通过...

B 客户端流RPC (clientstream Client Stream)

客户端编写一系列消息并将其发送到服务器,同样使用提供的流。一旦客户端写完消息,它就等待服务器读取消息并返回响应gRPC再次保证了单个RPC调用中的消息排序在客户端流RPC模式中,客户端会发送多个请...

我的模型我做主02——训练自己的大模型:简易入门指南

模型训练往往需要较高的配置,为了满足友友们的好奇心,这里我们不要内存,不要gpu,用最简单的方式,让大家感受一下什么是模型训练。基于你的硬件配置,我们可以设计一个完全在CPU上运行的简易模型训练方案。...

开源项目MessageNest打造个性化消息推送平台多种通知方式

今天介绍一个开源项目,MessageNest-可以打造个性化消息推送平台,整合邮件、钉钉、企业微信等多种通知方式。定制你的消息,让通知方式更灵活多样。开源地址:https://github.c...

使用投机规则API加快页面加载速度

当今的网络用户要求快速导航,从一个页面移动到另一个页面时应尽量减少延迟。投机规则应用程序接口(SpeculationRulesAPI)的出现改变了网络应用程序接口(WebAPI)领域的游戏规则。...

JSONP安全攻防技术

关于JSONPJSONP全称是JSONwithPadding,是基于JSON格式的为解决跨域请求资源而产生的解决方案。它的基本原理是利用HTML的元素标签,远程调用JSON文件来实现数据传递。如果...

大数据Doris(六):编译 Doris遇到的问题

编译Doris遇到的问题一、js_generator.cc:(.text+0xfc3c):undefinedreferenceto`well_known_types_js’查找Doris...

网页内嵌PDF获取的办法

最近女王大人为了通过某认证考试,交了2000RMB,官方居然没有给线下教材资料,直接给的是在线教材,教材是PDF的但是是内嵌在网页内,可惜却没有给具体的PDF地址,无法下载,看到女王大人一点点的截图保...

印度女孩被邻居家客人性骚扰,父亲上门警告,反被围殴致死

微信的规则进行了调整希望大家看完故事多点“在看”,喜欢的话也点个分享和赞这样事儿君的推送才能继续出现在你的订阅列表里才能继续跟大家分享每个开怀大笑或拍案惊奇的好故事啦~话说只要稍微关注新闻的人,应该...

下周重要财经数据日程一览 (1229-0103)

下周焦点全球制造业PMI美国消费者信心指数美国首申失业救济人数值得注意的是,下周一希腊还将举行第三轮总统选举需要谷歌日历同步及部分智能手机(安卓,iPhone)同步日历功能的朋友请点击此链接,数据公布...

PyTorch 深度学习实战(38):注意力机制全面解析

在上一篇文章中,我们探讨了分布式训练实战。本文将深入解析注意力机制的完整发展历程,从最初的Seq2Seq模型到革命性的Transformer架构。我们将使用PyTorch实现2个关键阶段的注意力机制变...

聊聊Spring AI的EmbeddingModel

序本文主要研究一下SpringAI的EmbeddingModelEmbeddingModelspring-ai-core/src/main/java/org/springframework/ai/e...

前端分享-少年了解过iframe么

iframe就像是HTML的「内嵌画布」,允许在页面中加载独立网页,如同在画布上叠加另一幅动态画卷。核心特性包括:独立上下文:每个iframe都拥有独立的DOM/CSS/JS环境(类似浏...