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

文章目录

前置操作

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

python 复制代码
import pythoncom
from win32com.client import Dispatch, GetActiveObject


def 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 = False
    finally:
        return word_app


def close_word_instance():
    try:
        word = GetActiveObject("Word.Application")
        if word:
            word.Quit()
    except pythoncom.com_error:
        # 杀掉word进程
        pass

解析body中的图形

python 复制代码
graphics = {}
import os
from PIL import ImageGrab, Image


def get_graphic_with_pywin32(doc_path):
    """ 基于pywin32 解析文档主体中的图形 """
    global graphics
    word = 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 BytesIO
        img = 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)  # 绝对路径

解析页眉中的图形

python 复制代码
def get_graphic_with_pywin32(doc_path):
    """ 基于pywin32 解析文档主体中的图形 """
    global graphics
    word = 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唯一
相关推荐
开开心心就好20 小时前
Word转PDF工具,免费生成图片型文档
前端·网络·笔记·pdf·word·powerpoint·excel
艺杯羹1 天前
解决 Word四大烦:消标记、去波浪线、关首字母大写、禁中文引号
word·文档·1024程序员节·word技巧
程序员陆通1 天前
Cursor配置markdown转Word的MCP工具教程
word
shandianchengzi1 天前
【经验】Word/WPS|用邮件合并批量填写表格或教案,单个Word导出成多个文件
word·wps·邮件·办公·邮件合并
zstar-_2 天前
FreeP2W:一个PDF转Word的CLI工具
pdf·word
JXL18602 天前
CS224N-Lecture01-Word Vectors
nlp·word
java_logo2 天前
Docker 部署 WordPress 全流程
运维·docker·容器·word·php·1024程序员节
Red Red3 天前
本科/硕士毕业论文格式修改大全|word格式修改
word
離離原上譜3 天前
python-docx 安装与快速入门
python·word·python-docx·自动化办公·1024程序员节