| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # -*- 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()
|