Skip to content

印前检查清单(Preflight) ​

规则引擎已落地(P3-10 → workers/export/src/preflight.ts,零依赖纯 TS,被导出 worker 与门禁共用): 20 条规则,每条带 why(印厂语境里为什么查)、severity(可按印厂配置升降级)、fix(可执行修法), 违规逐层点名。strict 模式下 error 级在出片前停线(APW_EXPORT_STRICT_PREFLIGHT=1 部署级强制)。 复跑:node tools/verify-preflight.mjs(60 项,含 8 类坏样本必须命中)与 node tools/verify-pdf-preflight.mjs(落盘文件读回)。 墨量分两笔账,两笔都要给:语义账走 R8/R20(Design JSON 里声明的墨与叠印),落墨账走栅格探针 P4-47(分色后逐像素,位图那一半只有这里看得见)。拿一笔顶另一笔是本轮门禁专门钉住的错法。

分工要说清:规则引擎判的是 Design JSON 语义(真源声明了什么),P4-38 判的是已落盘的那个文件 (字体到底嵌没嵌、图在这张纸上折算剩多少 ppi)。两半都有才算体检做完;但两者相加仍不构成"印厂可生产"判定—— 打样(PE-01/P3-12)不可省略。

图例:✔ 已自动化(有代码/命令)|◐ 半自动(界面给数字,人判断)|✘ 纯人工或尚未实现。

清单 ​

#检查项状态现在怎么做 / 归属
1有效分辨率(DPI/PPI)◐界面按素材真实像素算:有效 PPI = 原始像素宽 × 25.4 / 目标宽 mm(docs/demo/app.mjs 的 quality())。缺 dpi 时按 300 推算显示尺寸(docs/demo/scene.mjs)。低于目标时页面明写"放大像素数不能补回真实细节"
2A/B/C 用途档◐A = 小尺寸标识/酒标(默认目标宽 30 mm)、B = 常规包装(150 mm)、C = 海报/大幅(600 mm);这三档是可改的测试假设,不是客户已确认规格
3缺字 / 字形覆盖◐中文排版 v1(标点禁则/竖排/中英数混排)已落地(P2-04,回归防线是禁则用例集);印前 R1 查字体可嵌入(不可嵌 = error)、R2 查商用授权(pending = warning);交付包里也自己说(P4-55:README 的【字体与商用授权】区块 + manifest.fonts,逐款给授权状态与授权依据,对不上清单的点名要凭证),见字体授权与交付包里的字体账;逐字字形覆盖仍靠渲染链回退,正式量产前按印厂字库复核
4出血✔schema 默认四边 3 mm、安全区 5 mm;印前 R10 按该印厂配置的出血毫米数逐边核对(取最短边,一边不够就报),严格度随印厂配置(bleedSeverity);R4 查内容是否越出可印范围(画布外 = error)。具体厂规待 PE-01 标定
5色空间✔JSON 侧 mode: rgb | cmyk | spot 分离 + 落色在导出时做(P3-08,ADR-0002);R7 拦住生产稿上残留的 RGB 语义(并给 naive 近似 CMYK 供参考);正式生产色需换带证 ICC(Fogra39/Japan Color,PE-03 已备注),当前嵌 macOS Generic CMYK 并如实标 warn
6叠印 overprint / 总墨量✔R8 查单个对象墨量,R20(P4-45)查沿 z 序真的叠在一起的那一摞:overprint:true 才累加、区域取矩形交集、被更高陷印件整块盖住的不报;专色同样进栈(另一张版但同样上膜)。黑压在厚底上而真源没写 overprint 时不判死,报「若贵厂 RIP 默认叠黑则 X%」去问一句。看不见:位图与合成后的落墨(真源里位图只有 RGB 像素)→ 走下面的 6b;清漆/白墨上膜但不是墨
6b栅格墨量探针(位图与合成后落墨)✔P4-47(tools/raster-ink-kernel.py + workers/export/src/raster-ink.ts):把落盘的 PDF 用 poppler 分色成 CMYK 位图,逐像素加 C+M+Y+K,出最高/均值/p99/p99.9 与各厂规上限的超阈面积 mm² 与纸面 bbox。下单 rasterInk:true 才跑(默认关),结论随回执 receipt.rasterInk 走,演示稿实测最高 226.27%、180% 档超阈 73.86mm²(bbox 正落在品名那一行)。三条边界:① 不替代 R20——RIP 开叠印各版相加可以更高(同一处实测 570% vs 226%);② 未套厂 ICC(poppler 默认转换,换 ICC 数字会变);③ 深色矢量对象会低估:Chrome 落 PDF 时矢量与文字是 RGB,声明 360% 的对象栅格只剩 ≈110% K,所以矢量墨量仍以 R8/R20 为准
7专色一致性✘需在导出时核对专色名与印厂 Pantone 库版本;随 P3-08/P4-02
8刀线冲突(cut × cut 重叠、cut 压在折线上、glue 区被印刷内容覆盖)◐面板两两不重叠、faceIndex 唯一、UV 不越界(validateDieline + checkUvInvariants);R11 查刀/压/胶层名完备且不重名(CAD 不分大小写会并层 = error);R15 刀模与真源参数对账(error)、R16 结构尺寸经验下限、R19 纸幅放得下与否。cut×cut 共线与 glue 区被图文覆盖尚未规则化(PE-04 出正式结构口径后再收)
9条码合法性✔packages/design-json/src/barcodes.ts 校验位/字符集 + schema 拒绝 source: "aiReference" 的条码(复跑:pnpm --config.verify-deps-before-run=false test packages/design-json)
10引用完整性(素材/字体/面板)✔designSchema 的 superRefine;复跑 node tools/validate-design.mjs <design.json> 或页面 POST /api/validate
11素材自包含✔tools/validate-design.mjs 要求 image 图层的 asset 带合法内嵌 dataUrl,禁止回落本地路径
12画布/幅面✔同上:canvasMm 任一边 > 2500 mm 直接拒绝;印厂最大幅面仍需人工确认(PE-01)
12b印厂配置驱动◐出血毫米数、刀/压/胶层名、墨量上限、最小字号/DPI 都从印厂配置 printProfile.preflight 注入规则(workers/export/src/renderer.ts 同一入口),切厂不改正稿;配置里的厂规数值本身(叼口/丝流/叠印规矩/墨量上限)仍待 PE-01 确认
13校稿文件文字与页面✔tools/check-proof-evidence.py:pdftotext 必须能取到中文(例:53%vol、酱香型白酒)、pdffonts 必须出现 yes yes yes(嵌入/子集/Unicode)、mediabox 与 canvasMm 换算误差 < 1e-5、所有 word 必须在页面内。另有 P4-38 把真作业产物读回来体检(页面框/字体嵌入/位图有效 ppi),结论随回执 receipt.pdfPreflight 走,真稿里那张 98dpi 位图必须被点名
14AI 编辑越界✔同脚本断言 outside_mask_changed_pixels === 0 且选区内变化 > 10000 px
15保存重开一致性✔同脚本比对重开前后画布,改动像素必须为 0
16混合模式/透明度◐对象级裁剪/Mask/透明度/Blend 已落地(P2-05);overlay/darken/lighten/color/luminosity 仍是 WEB_ONLY_BLEND_MODES(界面上能用、导出会告警),因为分色后混合模式的结果没有实测依据
17PDF 标准合规✘PDF/X-4 尚未支持(P3-09 blocked);PE-03 已定开源替代(不采购 callas,自研 + poppler),但品牌客户/出口订单要的 PDFX+GWG 认证报告只能回归采购或认证流程。当前校稿 PDF 不宣称符合任何 PDF/X 或 GWG Profile
18文档口径✔node docs-site/check.mjs:内部链接、frontmatter、示例 JSON 结构、单位后缀、红线禁词

现在就能跑的复验命令 ​

sh
node docs-site/check.mjs                                     # 文档口径 + 示例结构
node tools/build-runtime.mjs                                 # 生成 schema runtime
node docs-site/check.mjs --zod                               # 用真实 zod 再校验示例
node tools/validate-design.mjs docs/demo/assets/design.json  # 引用完整性 / 自包含 / 幅面
node docs/demo/verify.mjs                                    # 浏览器端到端验收
node tools/verify-preflight.mjs                              # 印前 20 条规则 + strict 真实停线(60 项)
node tools/verify-pdf-preflight.mjs                          # 落盘 PDF 读回体检(字体/有效 ppi/页面框)
node tools/verify-raster-ink.mjs                               # 栅格墨量探针(分色真数/两口径不冒充/缺依赖不编数,41 项)
workers/ai/.venv/bin/python tools/check-proof-evidence.py    # 独立文件复验(需 pdftotext/pdffonts)
python3 tasks/check.py                                       # 任务状态一致性

tools/check-proof-evidence.py 是独立文件检查,不读界面自己报的指标;失败即非零退出。 它依赖机器上已有 pdftotext/pdffonts(poppler)与项目 Python 环境(Pillow、numpy、pypdf)。

交稿前人工签名栏(建议直接抄进邮件) ​

text
[ ] 校稿 PDF 已由需求方签署(文字、条码号、法规文案逐字核对)
[ ] 条码值来自 GS1/人工录入,不是 AI 图内识别
[ ] 字体授权状态已确认(pending → cleared 才进生产文件)
[ ] 印厂已确认:出血 / 幅面 / 纸张克重厚度 / PDF 标准要求
[ ] 有效 PPI 已按目标尺寸逐个素材复核(放大不补细节)
[ ] 已知未实现项已在邮件中列明(纸厚补偿与压线宽度=PE-04、PDF/X-4、叠印规矩与墨量上限=厂规 PE-01)
[ ] 样张回传后差异已归档到 docs/verification/print-runs/

交付前请核对文字、字体、结构与印厂要求,并保留确认版本。