Python实现PDF转换文件格式
最近工作中经常遇到收到其他人提供的pdf文档,想要编辑修改下或者复制部分内容比较困难,想通过现有的pdf工具软件转换文档格式,基本都要充钱,为了免费实现pdf转换工具,网上查了下相关技术方案,整理了下代码,测试真实有效,分享下。
第一步,安装相关第三方库
pip install PyMuPDF -i https://mirrors.aliyun.com/pypi/simple
pip install pdf2docx -i https://mirrors.aliyun.com/pypi/simple
第二步,编写代码
pdfConverter.py:
import datetime
import os
# fitz就是pip install PyMuPDF
import fitz
# pdf2docx 也是封装 fitz 模块为基础开发的
from pdf2docx import Converter '''
pdf 转换工具包
pdf 转成 word
pdf 转成 图片
pdf 转成 html
''' def pdf2word(file_path):
'''
@方法名称: pdf转word
@中文注释: pdf转word
@入参:
@param file_path str pdf文件路径
@出参:
@返回状态:
@return 0 失败或异常
@return 1 成功
@返回错误码
@返回错误信息
@param doc_file str word文件名
@作 者: PandaCode辉
@创建时间: 2023-10-16
@使用范例: pdf2word('test.pdf')
'''
try:
if (not type(file_path) is str):
return [0, "111111", "pdf文件路径参数类型错误,不为字符串", [None]]
# 开始时间
startTime = datetime.datetime.now()
# 提取文件名,去除文件后缀
file_name = file_path.split('.')[0]
print(file_name)
# word文件名
doc_file = f'{file_name}.docx'
print(doc_file)
p2w = Converter(file_path)
'''
convert(doc_file,start,end)函数中
doc_file:转化完成后文件名
start:转化开始页面
end:转化结束页面
注意点:
①若不给start,end参数则默认转化全篇
②对于不连续的页面,也可写作convert(doc_file , pages = [2,4,6])
'''
p2w.convert(doc_file, start=0, end=None)
p2w.close()
endTime = datetime.datetime.now() # 结束时间
print('pdf转word耗时: %s 秒' % (endTime - startTime).seconds)
print("pdf转word成功")
# 返回容器
return [1, '000000', 'pdf转word成功', [doc_file]] except Exception as e:
p2w.close()
print("pdf转word异常," + str(e))
return [0, '999999', "pdf转word异常," + str(e), [None]] def pdf2image(file_path, image_path):
'''
@方法名称: pdf转图片
@中文注释: pdf转图片
@入参:
@param file_path str pdf文件路径
@param image_path str 输出图片路径
@出参:
@返回状态:
@return 0 失败或异常
@return 1 成功
@返回错误码
@返回错误信息
@param image_path str 输出图片路径
@作 者: PandaCode辉
@创建时间: 2023-10-16
@使用范例: pdf2image('test.pdf', './images')
'''
try:
if (not type(file_path) is str):
return [0, "111111", "pdf文件路径参数类型错误,不为字符串", [None]]
if (not type(image_path) is str):
return [0, "111112", "输出图片路径参数类型错误,不为字符串", [None]]
# 开始时间
startTime = datetime.datetime.now()
print("pdfPath=" + file_path)
# 提取文件名,去除文件后缀
file_name = file_path.split('.')[0]
print(file_name)
print("imagePath=" + imagePath)
# 打开pdf文档
pdfDoc = fitz.open(file_path)
# 判断存放图片的文件夹是否存在
if not os.path.exists(image_path):
# 若图片文件夹不存在就创建
os.makedirs(image_path)
# Document.page_count 页数 (int)
# 循环页数
for pg in range(pdfDoc.page_count):
print('=======%s========' % (pg + 1))
'''
页面(Page)处理是MuPDF功能的核心。
您可以将页面呈现为光栅或矢量(SVG)图像,可以选择缩放、旋转、移动或剪切页面。
您可以提取多种格式的页面文本和图像,并搜索文本字符串。
对于PDF文档,可以使用更多的方法向页面添加文本或图像。
'''
page = pdfDoc[pg]
rotate = int(0)
# 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。
# 此处若是不做设置,默认图片大小为:792X612, dpi=96
zoom_x = 1.33333333 # (1.33333333-->1056x816) (2-->1584x1224)
zoom_y = 1.33333333
mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
'''
pix是一个Pixmap对象,它(在本例中)包含页面的RGB图像,可用于多种用途。
方法Page.get_pixmap()提供了许多用于控制图像的变体:分辨率、颜色空间(例如,生成灰度图像或具有减色方案的图像)、
透明度、旋转、镜像、移位、剪切等。
例如:创建RGBA图像(即,包含alpha通道),指定pix=page.get_pixmap(alpha=True)。
Pixmap包含以下引用的许多方法和属性。其中包括整数宽度、高度(每个像素)和跨距(一个水平图像行的字节数)。
属性示例表示表示图像数据的矩形字节区域(Python字节对象)。
还可以使用page.get_svg_image()创建页面的矢量图像。
'''
pix = page.get_pixmap(matrix=mat, alpha=False)
# 将图片写入指定的文件夹内
pix.save(image_path + '/' + file_name + '_%s.png' % (pg + 1))
endTime = datetime.datetime.now() # 结束时间
print('pdf转图片耗时: %s 秒' % (endTime - startTime).seconds)
print("pdf转图片成功")
# 返回容器
return [1, '000000', '"pdf转图片成功', [image_path]] except Exception as e:
print("pdf转图片异常," + str(e))
return [0, '999999', "pdf转图片异常," + str(e), [None]] def pdf2html(file_path):
'''
@方法名称: pdf转html
@中文注释: pdf转html
@入参:
@param file_path str pdf文件路径
@出参:
@返回状态:
@return 0 失败或异常
@return 1 成功
@返回错误码
@返回错误信息
@param out_file str html文件名
@作 者: PandaCode辉
@创建时间: 2023-10-16
@使用范例: pdf2html('test.pdf')
'''
try:
if (not type(file_path) is str):
return [0, "111111", "pdf文件路径参数类型错误,不为字符串", [None]]
# 开始时间
startTime = datetime.datetime.now()
print("pdfPath=" + pdfPath)
# 打开pdf文档
pdfDoc = fitz.open(pdfPath)
# 提取文件名,去除文件后缀
file_name = pdfPath.split('.')[0]
print(file_name)
out_file = f'{file_name}.html'
print(out_file)
# 打开文件,首次创建写入
fo = open(out_file, "w+", encoding="utf-8")
# Document.page_count 页数 (int)
# 循环页数
for pg in range(pdfDoc.page_count):
print('=======%s========' % (pg + 1))
'''
页面(Page)处理是MuPDF功能的核心。
您可以将页面呈现为光栅或矢量(SVG)图像,可以选择缩放、旋转、移动或剪切页面。
您可以提取多种格式的页面文本和图像,并搜索文本字符串。
对于PDF文档,可以使用更多的方法向页面添加文本或图像。
'''
page = pdfDoc[pg]
'''
提取文本和图像 page.get_text(opt)
我们还可以以多种不同的形式和细节级别提取页面的所有文本、图像和其他信息:
对opt使用以下字符串之一以获取不同的格式:
"text":(默认)带换行符的纯文本。无格式、无文字位置详细信息、无图像
"blocks":生成文本块(段落)的列表
"words":生成单词列表(不包含空格的字符串)
"html":创建页面的完整视觉版本,包括任何图像。这可以通过internet浏览器显示
"dict" / "json":与HTML相同的信息级别,但作为Python字典或resp.JSON字符串。
"rawdict" / "rawjson":"dict" / "json"
的超级集合。它还提供诸如XML之类的字符详细信息。
"xhtml":文本信息级别与文本版本相同,但包含图像。
"xml":不包含图像,但包含每个文本字符的完整位置和字体信息。使用XML模块进行解释
'''
# html 格式保存原PDF文本和图片样式还行
# text = page.get_text('html')
# xhtml 格式保存原PDF文本和图片样式更好
text = page.get_text('xhtml')
# 写入文件
fo.write(text)
# 关闭文件
fo.close()
endTime = datetime.datetime.now() # 结束时间
print('pdf转html耗时: %s 秒' % (endTime - startTime).seconds)
print("pdf转html成功")
# 返回容器
return [1, '000000', '"pdf转html成功', [out_file]] except Exception as e:
# 关闭文件
fo.close()
print("pdf转html异常," + str(e))
return [0, '999999', "pdf转html异常," + str(e), [None]] if __name__ == "__main__":
# PDF地址
pdfPath = 'test.pdf' # 1,pdf转word
pdf2word(pdfPath) # 储存图片的目录
imagePath = './images'
# 2,pdf转图片
pdf2image(pdfPath, imagePath) # 3,pdf转html
pdf2html(pdfPath)
第三步,运行查看效果

Python实现PDF转换文件格式的更多相关文章
- Python 将pdf转换成txt(不处理图片)
上一篇文章中已经介绍了简单的python爬网页下载文档,但下载后的文档多为doc或pdf,对于数据处理仍然有很多限制,所以将doc/pdf转换成txt显得尤为重要.查找了很多资料,在linux下要将d ...
- python之pdf转换操作 PyMuPDF库学习
1. 资料链接github地址: pymupdf/PyMuPDF: Python bindings for MuPDF's rendering library官方手册: PyMuPDF Documen ...
- 【PyMuPDF和pdf2image】Python将PDF转成图片
前言: 在最近的测试中遇到一个与PDF相关的测试需求,其中有一个过程是将PDF转换成图片,然后对图片进行测试. 粗略的试了好几种方式,其中语言尝试了Python和Java,总体而言所找到的Python ...
- pdf2docx:可将 PDF 转换成 docx 文件的 Python 库
pdf2docx:https://github.com/dothinking/pdf2docx 可将 PDF 转换成 docx 文件的 Python 库. from pdf2docx import p ...
- 使用Python从PDF文件中提取数据
前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...
- ABBYY如何把PDF转换Excel
我们都知道2007以上版本的Office文档,是可以直接将文档转存为PDF格式文档的.那么反过来,PDF文档可以转换成其他格式的文档吗?这是大家都比较好奇的话题.如果可以以其他格式进行保存,就可以极大 ...
- ABBYY把pdf转换成word的方法
有时候我们在网上下载的资料文献是PDF格式文档,遇到喜欢的字句总忍不住想要收藏起来,但是PDF文档不同于普通的Word文档可以直接进行复制粘贴,需要下载安装相关的编辑工具,才能对文字内容进行编辑.倒不 ...
- 如何用ABBYY把PDF转换成PPT
在电子科技迅速发展的今天,文件格式转换并不是什么稀罕事,因为现在都是电子化办公,出现很多文件格式,但是不同的场合需要的格式不同,所以常常需要进行文件格式的转换.PDF转换成PPT也是众多文件格式转换中 ...
- Python读取PDF内容
1,引言 晚上翻看<Python网络数据采集>这本书,看到读取PDF内容的代码,想起来前几天集搜客刚刚发布了一个抓取网页pdf内容的抓取规则,这个规则能够把pdf内容当成html来做网页抓 ...
- python制作pdf电子书
python制作pdf电子书 准备 制作电子书使用的是python的pdfkit这个库,pdfkit是 wkhtmltopdf 的Python封装包,因此在安装这个之前要安装wkhtmltopdf 安 ...
随机推荐
- Qt开源作品34-qwt无需插件源码
一.前言 QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目,可生成各种统计图.为具有技术专业背景的程序提供GUI组件和一组 ...
- lottie-web动画库在HTML5页面中和在vue项目中的两种使用方式
本文主要介绍lottie-web动画库在HTML5页面中和在vue项目中的两种使用方式. 1.在HTML5页面中的使用方式 具体使用步骤详见下面的代码: <!DOCTYPE html> & ...
- 在Win7 x64环境中将World Wind Java SDK 2.1.0嵌入到Eclipse中的方法
1.解压worldwind-2.1.0.zip. 2.打开Eclipse,依次点击New–>Java project ,输入project的名称WorldWind,一路直到finish.然后就可 ...
- [炼丹术]Yolov8训练使用总结
Yolov8训练使用总结 Yolov8训练使用总结 介绍 安装 Install pip install ultralytics Development git clone https://github ...
- Redis学习笔记之spring-data-redis
一.关于spring-data-redis spring-data-redis针对jedis提供了如下功能: 连接池自动管理,提供了一个高度封装的"RedisTemplate"类 ...
- .NET 开发的分流抢票软件,不做广告、不收集隐私
前言 每年春节大家必备的抢票工具Bypass-分流抢票.分流抢票是一款免费无广适用于PC端的自动分流抢票软件. 分流抢票,是以用户为中心.人性化的抢票软件.不做广告.不做推广.不携带病毒.不收集隐私信 ...
- Netty5 服务端和客户端-copy
概述netty 5 已经放弃掉了,作为学习netty4和5的差别不大,本例子是基于netty5 https://github.com/netty/netty/issues/4466 线程安全一个thr ...
- 直播预览层添加滤镜效果(CIFilter使用场景)
直播预览层添加滤镜效果 原理,在显示之前,提前对图片进行滤镜处理,把处理后的图片展示出来就好了. CIFiter(滤镜类):给图片添加特殊效果(模糊,高亮等等). CIFiter滤镜分类(一个滤镜可能 ...
- MySQL安装及基本使用教程
yanzilove win10下安装配置mysql环境 一.下载从https://dev.mysql.com/downloads/mysql/5.1.html#downloads下载zip包,这里 ...
- Linux 虚拟机中不重启的情况下加新硬盘及扩展根分区容量
我这个系统是Redhat7.7的系统.磁盘占用比较高,需要扩充空用空间,同时又不能关停服务器,或者服务.所以就需要在虚拟机中不重启的情况下加新硬盘及扩展根分区容量. 首先,看一下我这个虚拟机分区占用情 ...