当前位置: 首页 > news >正文

使用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()

功能概述

这个工具的主要功能包括:

  1. 选择文件夹:用户可以通过GUI界面选择包含Word文档的文件夹。
  2. 转换文档:将选择的文件夹中的所有Word文档转换为PNG图片,并记录转换日志。
  3. 显示消息:在转换完成后,显示一个消息框提示用户检查转换日志。

代码实现

导入必要的库

首先,我们需要导入一些必要的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()

代码解析

  1. 导入库:我们导入了os、wx、win32com、pythoncom、sys、traceback、tempfile和fitz库。这些库分别用于文件操作、创建GUI、与Word应用程序交互、处理异常、创建临时文件以及处理PDF文件。

  2. convert_word_to_pdf函数:这个函数使用win32com库将Word文档转换为PDF格式。它首先初始化COM库,然后创建一个Word应用程序实例,打开指定的Word文档,并将其导出为PDF格式。最后,它关闭文档并退出Word应用程序。

  3. convert_pdf_to_png函数:这个函数使用PyMuPDF库将PDF文件的第一页转换为PNG图片。它打开指定的PDF文件,加载第一页,生成图像并保存为PNG格式。

  4. MyFrame类:这是我们的GUI类,继承自wx.Frame。它包含一个文本框用于显示和输入文件夹路径,一个浏览按钮用于选择文件夹,以及一个转换按钮用于启动转换过程。on_browse方法用于处理浏览按钮点击事件,on_convert方法用于处理转换按钮点击事件。

  5. on_convert方法:这个方法首先获取用户选择的文件夹路径,然后遍历该文件夹中的所有Word文档,依次将其转换为PDF格式,再将PDF文件转换为PNG图片。转换过程中记录日志,并在转换完成后显示消息框。

  6. 主程序:在主程序中,我们创建一个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中插入浮点数字段时&#xff0c;会发现浮点数的小数位数很长&#xff0c;如下所示&#xff1a; #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、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前 3 年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&a…...

【单片机毕业设计选题24106】-基于阿里云的心率呼吸监测系统

系统功能: 上电后OLED显示 “欢迎使用请稍后”&#xff0c;两秒后显示Connecting...表示 正在连接阿里云&#xff0c;正常连接阿里云后进入系统显示界面&#xff0c;如长时间显示Connecting...请 检查WiFi网络是否正确。 系统连接阿里云后可在阿里云界面查看到系统上报的温…...

leetcode28:找出字符串第一个匹配的下标

找出字符串第一个匹配的下标 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 public int strStr(Str…...

Java二十三种设计模式-桥接模式(10/23)

桥接模式&#xff1a;解耦抽象与实现的灵活设计 引言 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;用于将抽象部分与其实现部分分离&#xff0c;使它们可以独立地变化。它是一种对象结构型模式&#xff0c;又称为柄体(Handle and Body)模…...

Java 面试指南

Java 面试指南 目录 引言Java 基础知识 数据类型运算符控制结构面向对象编程 Java 高级特性 异常处理集合框架泛型多线程与并发 Java 标准类库 java.lang 包java.util 包java.io 包 Java Web 开发 ServletJSPSpring 框架 数据库连接与JDBC JDBC 基础数据库连接池 设计模式 单…...

计算机毕业设计选题推荐-自习室座位预约系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长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包含传输层&#xff0c;链路层&#xff0c;物理层。 应用层是对 JESD204B 进行配置的接口&#xff0c;在标准协议中是不含此层&#xff0c;只是为了便于理解&#xff0c;添加的一个层。 协议层指工程中生成的IP核JESD204B&#xff0c;负责处理输入的用户…...

网络安全-渗透测试工具及插件介绍和使用方法

1、Burp Suite Burp Suite 是用于攻击web 应用程序的集成平台。 是一款广泛使用的网络安全工具套件&#xff0c;主要用于测试Web应用程序的安全性。它可以帮助安全研究人员、渗透测试人员和开发人员发现和利用Web应用程序中的安全漏洞。 &#xff08;1&#xff09;下载和安装&a…...

JAVA WEB初步实验

Spring应用开发环境准备 安装配置Spring应用开发环境 熟悉IntelliJ IDEA开发工具 打开idea工具&#xff0c;创建普通Java工程 配置普通Java工程运行环境 得到基本的Java运行环境配置正常 修改pom.xml文件&#xff0c;搭建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(…...

电商行业中选择分账系统的关键因素!

分账是指将一笔交易的款项拆分成多个部分&#xff0c;按照预先设定的比例或规则分配给相关方。在电商行业中&#xff0c;分账通常是指将交易金额分给卖家、平台和其他相关方。 具体来说&#xff0c;分账可以帮助实现以下目标&#xff1a; 卖家结算&#xff1a;将顾客支付的货…...

通过继承实现状态模式(C++)

注意&#xff1a;先做类的声明和抽象基类的声明 抽象基类的函数方法中引入类&#xff0c;具体方法在类的实现后面声明。 在抽象基类的子类的函数中可以调用类的成员函数。 #include <iostream>using namespace std;class Contex;class state { public:virtual void Ha…...

全国多地公布2024下半年软考报名具体时间

下半年开考科目&#xff1a; 高级资格&#xff1a;系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师 中级资格&#xff1a;软件设计师、网络工程师、信息安全工程师、信息系统监理师、多媒体应用设计师、系统集成项目管理工程师 初级资格&#xff1a;网络管理…...

【Python】requests的response.text 和 urllib.request 的 response.read()的区别

刚写代码的时候&#xff0c;我经常会把requests 和 urllib下的request 包搞混&#xff0c;这两个请求响应的方法看起来很相似&#xff0c;但是写获取的方法是不一样的。 前者requests 是用response.text 来获取源码&#xff0c;而 urllib.request是用 response.read() 来获取h…...

Obsidian插件安装与开发

大概背景 事情的起因还是因为做笔记&#xff0c;我喜欢利用插件Obsidian Git自动同步笔记到Gitee&#xff0c;写md文档有个问题就是关于图片如何存储。 我个人习惯是将所有图片都保存到指定的文件夹下&#xff0c;如图&#x1f447; 由于Obsidian对粘贴图片默认格式为这样的&…...

lvs的dr模式实现

目录 一、实验环境准备 1、五台红帽9系统的主机 2、关闭所有的防火墙以及关闭selinux 二、在lvs中配置 1、在lvs中安装lvs软件并设置开机启动 2、在lvs中打开内核路由功能&#xff0c;并把它写入/etc/sysctl.conf文件中 3、webserver1和webserver2下载httpd 4、在lvs主机…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; 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 数据流…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...