使用Python将Word文档转换为PNG图片
在这篇博客中,我将介绍一个使用Python编写的小工具,它能够将指定文件夹中的所有Word文档(.doc和.docx格式)转换为PNG图片。这个工具基于wxPython库构建图形用户界面,并结合了win32com和PyMuPDF库实现文档格式的转换。接下来,我将详细说明这个工具的功能及其实现。
D:\spiderdocs\wordtoscreenshot.py
全部代码
import os
import wx
from win32com import client as wc
import pythoncom
import sys
import traceback
import tempfile
import fitz # PyMuPDFdef convert_word_to_pdf(word_path, pdf_path):pythoncom.CoInitialize()word = Nonedoc = Nonetry:word = wc.Dispatch("Word.Application")word.Visible = Falsedoc = word.Documents.Open(word_path)doc.ExportAsFixedFormat(pdf_path, 17) # 17 is wdExportFormatPDFprint(f"Successfully exported {word_path} to {pdf_path}")except Exception as e:print(f"Error in convert_word_to_pdf: {str(e)}")print("Traceback:")traceback.print_exc()raisefinally:if doc:doc.Close(SaveChanges=False)if word:word.Quit()pythoncom.CoUninitialize()def convert_pdf_to_png(pdf_path, png_path):try:doc = fitz.open(pdf_path)page = doc.load_page(0) # Load the first pagepix = page.get_pixmap()pix.save(png_path)doc.close()print(f"Successfully converted {pdf_path} to {png_path}")except Exception as e:print(f"Error in convert_pdf_to_png: {str(e)}")print("Traceback:")traceback.print_exc()raiseclass MyFrame(wx.Frame):def __init__(self):super().__init__(parent=None, title='Word to PNG Converter')panel = wx.Panel(self)self.folder_path = wx.TextCtrl(panel, pos=(5, 5), size=(350, 25))browse_button = wx.Button(panel, label='Browse', pos=(360, 5), size=(70, 25))browse_button.Bind(wx.EVT_BUTTON, self.on_browse)convert_button = wx.Button(panel, label='Convert', pos=(5, 35), size=(425, 25))convert_button.Bind(wx.EVT_BUTTON, self.on_convert)self.SetSize((450, 100))self.Show()def on_browse(self, event):dlg = wx.DirDialog(self, "Choose a directory:", style=wx.DD_DEFAULT_STYLE)if dlg.ShowModal() == wx.ID_OK:self.folder_path.SetValue(dlg.GetPath())dlg.Destroy()def on_convert(self, event):folder = self.folder_path.GetValue()if not folder:wx.MessageBox('Please select a folder first', 'Error', wx.OK | wx.ICON_ERROR)returnlog = []for filename in os.listdir(folder):if filename.endswith('.doc') or filename.endswith('.docx'):word_path = os.path.join(folder, filename)png_path = os.path.splitext(word_path)[0] + '.png'try:with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_pdf:pdf_path = tmp_pdf.nameconvert_word_to_pdf(word_path, pdf_path)convert_pdf_to_png(pdf_path, png_path)os.unlink(pdf_path) # Remove the temporary PDF filelog.append(f'Converted {filename} to PNG')except Exception as e:log.append(f'Error converting {filename}: {str(e)}')log_str = '\n'.join(log)with open('conversion_log.txt', 'w') as f:f.write(log_str)wx.MessageBox('Conversion completed. Check conversion_log.txt for details.', 'Info', wx.OK | wx.ICON_INFORMATION)if __name__ == '__main__':app = wx.App()frame = MyFrame()app.MainLoop()
功能概述
这个工具的主要功能包括:
- 选择文件夹:用户可以通过GUI界面选择包含Word文档的文件夹。
- 转换文档:将选择的文件夹中的所有Word文档转换为PNG图片,并记录转换日志。
- 显示消息:在转换完成后,显示一个消息框提示用户检查转换日志。
代码实现
导入必要的库
首先,我们需要导入一些必要的Python库:
import os
import wx
from win32com import client as wc
import pythoncom
import sys
import traceback
import tempfile
import fitz # PyMuPDF
Word到PDF的转换函数
使用win32com库中的Word应用程序接口,我们可以将Word文档转换为PDF格式:
def convert_word_to_pdf(word_path, pdf_path):pythoncom.CoInitialize()word = Nonedoc = Nonetry:word = wc.Dispatch("Word.Application")word.Visible = Falsedoc = word.Documents.Open(word_path)doc.ExportAsFixedFormat(pdf_path, 17) # 17 is wdExportFormatPDFprint(f"Successfully exported {word_path} to {pdf_path}")except Exception as e:print(f"Error in convert_word_to_pdf: {str(e)}")print("Traceback:")traceback.print_exc()raisefinally:if doc:doc.Close(SaveChanges=False)if word:word.Quit()pythoncom.CoUninitialize()
PDF到PNG的转换函数
接着,我们使用PyMuPDF库将PDF文件转换为PNG图片:
def convert_pdf_to_png(pdf_path, png_path):try:doc = fitz.open(pdf_path)page = doc.load_page(0) # Load the first pagepix = page.get_pixmap()pix.save(png_path)doc.close()print(f"Successfully converted {pdf_path} to {png_path}")except Exception as e:print(f"Error in convert_pdf_to_png: {str(e)}")print("Traceback:")traceback.print_exc()raise
图形用户界面(GUI)
我们使用wxPython库创建一个简单的GUI,允许用户选择文件夹并启动转换:
class MyFrame(wx.Frame):def __init__(self):super().__init__(parent=None, title='Word to PNG Converter')panel = wx.Panel(self)self.folder_path = wx.TextCtrl(panel, pos=(5, 5), size=(350, 25))browse_button = wx.Button(panel, label='Browse', pos=(360, 5), size=(70, 25))browse_button.Bind(wx.EVT_BUTTON, self.on_browse)convert_button = wx.Button(panel, label='Convert', pos=(5, 35), size=(425, 25))convert_button.Bind(wx.EVT_BUTTON, self.on_convert)self.SetSize((450, 100))self.Show()def on_browse(self, event):dlg = wx.DirDialog(self, "Choose a directory:", style=wx.DD_DEFAULT_STYLE)if dlg.ShowModal() == wx.ID_OK:self.folder_path.SetValue(dlg.GetPath())dlg.Destroy()def on_convert(self, event):folder = self.folder_path.GetValue()if not folder:wx.MessageBox('Please select a folder first', 'Error', wx.OK | wx.ICON_ERROR)returnlog = []for filename in os.listdir(folder):if filename.endswith('.doc') or filename.endswith('.docx'):word_path = os.path.join(folder, filename)png_path = os.path.splitext(word_path)[0] + '.png'try:with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_pdf:pdf_path = tmp_pdf.nameconvert_word_to_pdf(word_path, pdf_path)convert_pdf_to_png(pdf_path, png_path)os.unlink(pdf_path) # Remove the temporary PDF filelog.append(f'Converted {filename} to PNG')except Exception as e:log.append(f'Error converting {filename}: {str(e)}')log_str = '\n'.join(log)with open('conversion_log.txt', 'w') as f:f.write(log_str)wx.MessageBox('Conversion completed. Check conversion_log.txt for details.', 'Info', wx.OK | wx.ICON_INFORMATION)if __name__ == '__main__':app = wx.App()frame = MyFrame()app.MainLoop()
代码解析
-
导入库:我们导入了os、wx、win32com、pythoncom、sys、traceback、tempfile和fitz库。这些库分别用于文件操作、创建GUI、与Word应用程序交互、处理异常、创建临时文件以及处理PDF文件。
-
convert_word_to_pdf函数:这个函数使用win32com库将Word文档转换为PDF格式。它首先初始化COM库,然后创建一个Word应用程序实例,打开指定的Word文档,并将其导出为PDF格式。最后,它关闭文档并退出Word应用程序。
-
convert_pdf_to_png函数:这个函数使用PyMuPDF库将PDF文件的第一页转换为PNG图片。它打开指定的PDF文件,加载第一页,生成图像并保存为PNG格式。
-
MyFrame类:这是我们的GUI类,继承自wx.Frame。它包含一个文本框用于显示和输入文件夹路径,一个浏览按钮用于选择文件夹,以及一个转换按钮用于启动转换过程。on_browse方法用于处理浏览按钮点击事件,on_convert方法用于处理转换按钮点击事件。
-
on_convert方法:这个方法首先获取用户选择的文件夹路径,然后遍历该文件夹中的所有Word文档,依次将其转换为PDF格式,再将PDF文件转换为PNG图片。转换过程中记录日志,并在转换完成后显示消息框。
-
主程序:在主程序中,我们创建一个wx.App实例,并创建MyFrame实例来显示GUI。
结果如下

总结
通过这篇博客,我们介绍了如何使用Python和wxPython库创建一个简单的GUI工具,将指定文件夹中的所有Word文档转换为PNG图片。这个工具使用了win32com库与Word应用程序交互,将Word文档导出为PDF格式,并使用PyMuPDF库将PDF文件转换为PNG图片。希望这篇博客对你有所帮助!
相关文章:
使用Python将Word文档转换为PNG图片
在这篇博客中,我将介绍一个使用Python编写的小工具,它能够将指定文件夹中的所有Word文档(.doc和.docx格式)转换为PNG图片。这个工具基于wxPython库构建图形用户界面,并结合了win32com和PyMuPDF库实现文档格式的转换。接…...
Qt创建Json对象时浮点数的精度控制
我们在Qt中使用Json都是使用QJsonDocument、QJsonArray、QJsonObject、QJsonValue等类。 当我们在QJsonObject中插入浮点数字段时,会发现浮点数的小数位数很长,如下所示: #include <QJsonDocument> #include <QJsonArray> #incl…...
【海贼王航海日志:前端技术探索】CSS你了解多少?(二)
目录 1 -> 字体属性 1.1 -> 设置字体 1.2 -> 字体大小 1.3 -> 字体粗细 1.4 -> 文字样式 2 -> 文本属性 2.1 -> 文本颜色 2.1.1 -> 认识RGB 2.1.2 -> 设置文本颜色 2.2 -> 文本对齐 2.3 -> 文本装饰 2.4 -> 文本缩进 2.5 -&g…...
软件测试面试200问(全)
1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前 3 年积累测试经验,按如何做好测试工程师的要点去要求自己&a…...
【单片机毕业设计选题24106】-基于阿里云的心率呼吸监测系统
系统功能: 上电后OLED显示 “欢迎使用请稍后”,两秒后显示Connecting...表示 正在连接阿里云,正常连接阿里云后进入系统显示界面,如长时间显示Connecting...请 检查WiFi网络是否正确。 系统连接阿里云后可在阿里云界面查看到系统上报的温…...
leetcode28:找出字符串第一个匹配的下标
找出字符串第一个匹配的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 public int strStr(Str…...
Java二十三种设计模式-桥接模式(10/23)
桥接模式:解耦抽象与实现的灵活设计 引言 桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模…...
Java 面试指南
Java 面试指南 目录 引言Java 基础知识 数据类型运算符控制结构面向对象编程 Java 高级特性 异常处理集合框架泛型多线程与并发 Java 标准类库 java.lang 包java.util 包java.io 包 Java Web 开发 ServletJSPSpring 框架 数据库连接与JDBC JDBC 基础数据库连接池 设计模式 单…...
计算机毕业设计选题推荐-自习室座位预约系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
android13 删除兼容性警告窗口 deprecation warning 去除弃用警告
总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况 3.问题分析 4.代码更改 5.编译测试 6.彩蛋 1.前言 在 Android 13 中,为了提高用户体验和应用的兼容性,系统引入了一些新的隐私和安全特性。这些特性可能会影响旧版应用的行为,因此当用户运行可能不完全兼容 An…...
JESD204B/C协议学习笔记
JESD204B基础概念 204B包含传输层,链路层,物理层。 应用层是对 JESD204B 进行配置的接口,在标准协议中是不含此层,只是为了便于理解,添加的一个层。 协议层指工程中生成的IP核JESD204B,负责处理输入的用户…...
网络安全-渗透测试工具及插件介绍和使用方法
1、Burp Suite Burp Suite 是用于攻击web 应用程序的集成平台。 是一款广泛使用的网络安全工具套件,主要用于测试Web应用程序的安全性。它可以帮助安全研究人员、渗透测试人员和开发人员发现和利用Web应用程序中的安全漏洞。 (1)下载和安装&a…...
JAVA WEB初步实验
Spring应用开发环境准备 安装配置Spring应用开发环境 熟悉IntelliJ IDEA开发工具 打开idea工具,创建普通Java工程 配置普通Java工程运行环境 得到基本的Java运行环境配置正常 修改pom.xml文件,搭建Spring IOC运行环境 更新pom文件 新建User、TestSpr…...
30 个 JavaScript 技巧,让你的代码更具可读性
1 、使用 !! 转换为布尔值 使用双重否定快速将任何值转换为布尔值。 let truthyValue !!1; // true let falsyValue !!0; // false 2 、 默认函数参数 设置函数参数的默认值以避免定义错误。 function greet(name "Guest") {return Hello, ${name}!; }greet(…...
电商行业中选择分账系统的关键因素!
分账是指将一笔交易的款项拆分成多个部分,按照预先设定的比例或规则分配给相关方。在电商行业中,分账通常是指将交易金额分给卖家、平台和其他相关方。 具体来说,分账可以帮助实现以下目标: 卖家结算:将顾客支付的货…...
通过继承实现状态模式(C++)
注意:先做类的声明和抽象基类的声明 抽象基类的函数方法中引入类,具体方法在类的实现后面声明。 在抽象基类的子类的函数中可以调用类的成员函数。 #include <iostream>using namespace std;class Contex;class state { public:virtual void Ha…...
全国多地公布2024下半年软考报名具体时间
下半年开考科目: 高级资格:系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师 中级资格:软件设计师、网络工程师、信息安全工程师、信息系统监理师、多媒体应用设计师、系统集成项目管理工程师 初级资格:网络管理…...
【Python】requests的response.text 和 urllib.request 的 response.read()的区别
刚写代码的时候,我经常会把requests 和 urllib下的request 包搞混,这两个请求响应的方法看起来很相似,但是写获取的方法是不一样的。 前者requests 是用response.text 来获取源码,而 urllib.request是用 response.read() 来获取h…...
Obsidian插件安装与开发
大概背景 事情的起因还是因为做笔记,我喜欢利用插件Obsidian Git自动同步笔记到Gitee,写md文档有个问题就是关于图片如何存储。 我个人习惯是将所有图片都保存到指定的文件夹下,如图👇 由于Obsidian对粘贴图片默认格式为这样的&…...
lvs的dr模式实现
目录 一、实验环境准备 1、五台红帽9系统的主机 2、关闭所有的防火墙以及关闭selinux 二、在lvs中配置 1、在lvs中安装lvs软件并设置开机启动 2、在lvs中打开内核路由功能,并把它写入/etc/sysctl.conf文件中 3、webserver1和webserver2下载httpd 4、在lvs主机…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
