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唯一
相关推荐
垂杨有暮鸦⊙_⊙8 小时前
word文档中的文档网格——解决相同行间距当显示出不同行间距的情况
word
a-6269 小时前
毕设中所学
word·ppt·envi
爱上python的猴子1 天前
怎样在 Word 文档中插入附件(其他文件)?
word
流形填表1 天前
试题转excel;word转excel;大风车excel(1.1更新)
word·excel
shandianchengzi1 天前
【代码】Python|Windows 批量尝试密码去打开加密的 Word 文档(docx和doc)
windows·python·word
ChristianLuu2 天前
Word格式修改
word
废材是怎么养成的2 天前
pdf转word
java·pdf·word
平凡20462 天前
平凡的2024回顾
word
大霸王龙3 天前
Python中PDF转Word的技术
python·pdf·word
葡萄城技术团队4 天前
文档大师:打造一站式 Word 报告解决方案1
word