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唯一
相关推荐
计算衎1 天前
python通过win32com库调用UDE工具来做开发调试实现自动化源码,以及UDE的知识点介绍
python·c/c++·pywin32·ude·com api
跳动的喵尾巴2 天前
Endnote | word中加载项消失不见,如何处理?
word
夜白宋2 天前
【word多文档docx合并】
java·word
Uluoyu4 天前
word、pdf文档内容提取工具类
java·pdf·word
sanshizhang4 天前
word文档转pdf开源免费,可自定义水印
pdf·开源·word
lijingguang4 天前
excel和word文件默认用office打开而不是用wps
word·excel·wps
Uluoyu5 天前
支持Word (doc/docx) 和 PDF 转成一张垂直拼接的长PNG图片工具类
java·pdf·word
VBAMatrix5 天前
报告工具更新!Word附注一键期末转期初
word·办公自动化·审计报告·审计·会计师事务所·报告工具·word附注
恶猫5 天前
Polaris Officev9.9.12全功能解锁版
pdf·word·excel·ppt·office·办公·打工
睿思达DBA_WGX6 天前
使用 python-docx 库操作 word 文档(3):读取word文档的内容
python·word