# -*- coding: utf-8 -*- """读回盖章版里每个浮动图形的实际尺寸、角度与所在页,核实是否符合实物尺寸。""" import io import os import sys import time from collections import defaultdict sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8") BID = r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目招投标" NAME = "响应文件(完整版)-2026年河南产互联制造业数据智能运营平台研发项目.docx" OUT = os.path.join(BID, NAME[:-5] + "(已签章).docx") MM = 2.8346457 WD_PAGE = 3 import win32com.client as win32 word = None for i in range(4): try: word = win32.gencache.EnsureDispatch("Word.Application") word.Visible = False word.DisplayAlerts = 0 break except Exception as e: print(f" 重试 {i + 1}/4:{e}") time.sleep(4) doc = word.Documents.Open(OUT, ReadOnly=True) try: print(f"浮动图形 {doc.Shapes.Count} 个\n") print(f"{'#':>3} {'页':>4} {'宽mm':>7} {'高mm':>7} {'角度':>7} 名称") kinds = defaultdict(list) for i in range(1, doc.Shapes.Count + 1): s = doc.Shapes(i) w, h = float(s.Width) / MM, float(s.Height) / MM rot = float(s.Rotation) pg = int(s.Anchor.Information(WD_PAGE)) kind = ("公章" if abs(w - h) < 1.5 and w > 35 else "印鉴" if abs(w - h) < 1.5 else "签名") kinds[kind].append((w, h, rot)) print(f"{i:>3} {pg:>4} {w:7.2f} {h:7.2f} {rot:+7.2f} {kind}") print() for k, v in kinds.items(): ws = [x[0] for x in v] rs = sorted(round(x[2], 1) for x in v) print(f"{k}:{len(v)} 个 宽 {min(ws):.2f}–{max(ws):.2f}mm " f"角度 {min(rs):+.1f}°–{max(rs):+.1f}° " f"互不相同 {len(set(rs)) == len(rs)}") finally: doc.Close(False) word.Quit()