# -*- coding: utf-8 -*- """把响应文件附件用的原始材料统一成正立、可直接嵌入 Word 的 PNG。 原始材料是手机拍摄/扫描件,方向、尺寸不一;本脚本只做旋转、裁切与转码, 不修改内容。输出到 doc/_bid_assets/attach/。 """ import io import os import sys import fitz from PIL import Image sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8") HERE = os.path.dirname(os.path.abspath(__file__)) OUT = os.path.join(HERE, "_bid_assets", "attach") SRC = r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目招投标\相关准备材料" ID_DIR = os.path.join(SRC, "法人身份证") # 身份证目录下两张图:文件名无序,按「含人像面」判断正反 ID_FRONT = "ab38c8443b6f79937721e4c44f3443b9.jpg" # 人像面 ID_BACK = "6b07461148f7008daefa38ee3ab90444.jpg" # 国徽面 def save(im, name): """扫描件与照片统一存 JPEG:整套附件二十余页,用 PNG 无损会把文档撑到 50MB+。 quality/subsampling 取偏高档位,保证证书与报告上的小字仍然锐利。 """ p = os.path.join(OUT, name) im.save(p, quality=88, subsampling=0, optimize=True, progressive=True) kb = os.path.getsize(p) / 1024 print(f" {name} {im.width}x{im.height} {kb:,.0f} KB") return p def from_jpg(rel, name, rotate=0, box=None): im = Image.open(os.path.join(SRC, rel)).convert("RGB") if box: im = im.crop(box) if rotate: im = im.rotate(rotate, expand=True) return save(im, name) def from_pdf(rel, prefix, dpi=150): d = fitz.open(os.path.join(SRC, rel)) out = [] for i in range(d.page_count): pm = d[i].get_pixmap(dpi=dpi) im = Image.frombytes("RGB", (pm.width, pm.height), pm.samples) out.append(save(im, f"{prefix}_{i + 1:02d}.jpg")) return out def main(): os.makedirs(OUT, exist_ok=True) print("法定代表人身份证(逆时针 90° 转正):") im = Image.open(os.path.join(ID_DIR, ID_FRONT)).convert("RGB") save(im.rotate(90, expand=True), "id_front.jpg") im = Image.open(os.path.join(ID_DIR, ID_BACK)).convert("RGB") save(im.rotate(90, expand=True), "id_back.jpg") print("营业执照(沿用已裁好的正立图):") lic = os.path.join(HERE, "_bid_assets", "营业执照.png") save(Image.open(lic).convert("RGB"), "license.jpg") print("软件企业证书(顺时针 90° 转正):") from_jpg("软件企业证书.jpg", "sw_enterprise.jpg", rotate=-90) print("软件产品证书(自双证合照下半幅裁出):") from_jpg("软件企业证书&软件产品证书.jpg", "sw_product.jpg", box=(110, 820, 1270, 1650)) print("公共信用报告:") from_pdf("北京智造易科技有限公司公共信用报告.pdf", "credit", dpi=140) print("软件著作权登记证书:") from_pdf("智造易-软件著作权10个证书.pdf", "swc", dpi=150) print(f"\n输出目录:{OUT}") if __name__ == "__main__": main()