"""S1:用 Gotenberg 把 10 份样本转成 PDF,记录页数、耗时、是否失败。 用法:python -I convert.py <配置名> [预处理后的 DOCX 目录] """ import json, sys, time, pathlib sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent)) import httpx, pypdfium2 as pdfium from common import IDS, sample_file, sniff cfg, base = sys.argv[1], sys.argv[2] src_dir = pathlib.Path(sys.argv[3]) if len(sys.argv) > 3 else None # 预处理后的 DOCX 目录 out = pathlib.Path(__file__).parent / "out" / cfg out.mkdir(parents=True, exist_ok=True) rows = {} with httpx.Client(timeout=600) as c: for sid in IDS: f = (src_dir / f"{sid}.docx") if src_dir else sample_file(sid) ext = sniff(f) # 按真实格式给扩展名,LibreOffice 据此选过滤器 t = time.monotonic() r = c.post(f"{base}/forms/libreoffice/convert", files={"files": (f"{sid}.{ext}", f.read_bytes())}) dt = round(time.monotonic() - t, 1) if r.status_code != 200: rows[sid] = {"ok": False, "status": r.status_code, "err": r.text[:200], "sec": dt} else: pdf = out / f"{sid}.pdf" pdf.write_bytes(r.content) n = len(pdfium.PdfDocument(str(pdf))) rows[sid] = {"ok": True, "pages": n, "sec": dt} print(cfg, sid, rows[sid], flush=True) (out / "result.json").write_text(json.dumps(rows, ensure_ascii=False, indent=1))