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

pywin32库 -- 读取word文档中的图形

文章目录

  • 前置操作
  • 解析body中的图形
  • 解析页眉中的图形

前置操作

基于pywin32打开、关闭word应用程序;


import pythoncom
from win32com.client import Dispatch, GetActiveObjectdef get_word_instance():""" 获取word进程 实例"""pythoncom.CoInitialize()try:# 获取运行的Word实例word_app = GetActiveObject("Word.Application")except pythoncom.com_error:# 打开word程序word_app = Dispatch("Word.Application")word_app.Visible = False  # 不显示 Word 界面word_app.DisplayAlerts = Falsefinally:return word_appdef close_word_instance():try:word = GetActiveObject("Word.Application")if word:word.Quit()except pythoncom.com_error:# 杀掉word进程pass

 

解析body中的图形

graphics = {}
import os
from PIL import ImageGrab, Imagedef get_graphic_with_pywin32(doc_path):""" 基于pywin32 解析文档主体中的图形 """global graphicsword = get_word_instance()doc = word.Documents.Open(doc_path)for shape in doc.Shapes:  # 文档主体中的图形print("shape:", shape.Name, shape.Type)  # Type为1是图形,Name唯一page_id = shape.Anchor.Information(1)# shape.Anchor.CopyAsPicture()   个人版不支持# image = ImageGrab.grabclipboard()# 方案1  图形转图片inline_shape = shape.ConvertToInlineShape()bdata = inline_shape.Range.EnhMetaFileBits.tobytes()from io import BytesIOimg = Image.open(BytesIO(bdata))img.save(shape.Name + ".png")# 方案2,若以上方案获取的图片 纵横比失真,则采用该方案# inline_shape = shape.ConvertToInlineShape()# inline_shape.Range.CopyAsPicture()# image = ImageGrab.grabclipboard()# 方案3, 图形直接保存   (个人版 报错AttributeError: <unknown>.SaveAsPicture)# pic_path = os.path.abspath("./{}_3.png".format(shape.Name))# shape.SaveAsPicture(pic_path)  # 绝对路径

 

解析页眉中的图形

def get_graphic_with_pywin32(doc_path):""" 基于pywin32 解析文档主体中的图形 """global graphicsword = get_word_instance()doc = word.Documents.Open(doc_path)for section in doc.Sections:for header in section.Footers:for shape in header.Shapes:inline_shape = shape.ConvertToInlineShape()bdata = inline_shape.Range.EnhMetaFileBits.tobytes()  # 直接保存无法查看img = PillowImage.open(BytesIO(bdata))img.save("./{}.png".format(shape.Name))with open("./{}.png".format(shape.Name), "rb") as f:bdata = f.read()  # 读取的字节 与 image.tobytes() 不一样graphics[shape.Name] = bdata  # Name唯一
http://www.lryc.cn/news/492907.html

相关文章:

  • GitLab使用示例
  • uniapp echarts tooltip formation 不识别html
  • 3D扫描对文博行业有哪些影响?
  • 面试(十一)
  • React-useState的使用
  • 设计模式之破环单例模式和阻止破坏
  • 11.19c++面向对象+单例模式
  • 一文了解TensorFlow是什么
  • 如何做好一份技术文档?
  • Linux和Ubuntu的关系
  • 软件工程之静态建模
  • PICO VR串流调试Unity程序
  • 自媒体图文视频自动生成软件|03| 页面和结构介绍
  • 深入浅出摸透AIGC文生图产品SD(Stable Diffusion)
  • 解析生成对抗网络(GAN):原理与应用
  • CodeIgniter URL结构
  • 从 App Search 到 Elasticsearch — 挖掘搜索的未来
  • 鸿蒙本地模拟器 模拟TCP服务端的过程
  • Qt/C++基于重力模拟的像素点水平堆叠效果
  • Zookeeper学习心得
  • 嵌入式开发工程师面试题 - 2024/11/24
  • Python中打印当前目录文件树的脚本
  • 全景图像(Panorama Image)向透视图像(Perspective Image)的跨视图转化(Cross-view)
  • Redis 中的 hcan 命令耗内存,有什么优化的方式吗 ?
  • 豆包MarsCode算法题:三数之和问题
  • 【Android】AnimationDrawable帧动画的实现
  • 【消息序列】详解(7):剖析回环模式--设备测试的核心利器
  • 解决Ubuntu 22.04系统中网络Ping问题的方法
  • 【大数据学习 | Spark-SQL】Spark-SQL编程
  • 15分钟做完一个小程序,腾讯这个工具有点东西