源程序 PDF 的页数必须在生成之前算死。贴一段源码,看 ruanzhu-kit 怎么按「折行后的行高单位」切页、怎么按登记办法取前 30 后 30——渲染前算死,出完回读核验。逻辑 1:1 移植自 lib/paginate.mjs。
为什么按单位不按行数:一行 300 字符在 A4 上折成 4 行,按行数切页必然撑破页面。displayWidth 里东亚宽字符(中文注释、全角标点)算 2 字符宽,制表符按 4 格对齐展开;wrapUnits = max(1, ceil(宽/每行字符)),空行也占 1 单位。
切页:逐行累加单位,装满一页就换页,分页点用 page-break-after 钉死交给 Chrome 渲染——页数在生成之前就是确定的。折行超过一整页的行截断为单页(防死循环),且这类行基本是压缩产物,count 会把它列出来让你排掉。
提交范围:≤60 页全交(材料 = 排版页数 + 封面);>60 页取整份源程序的前 30 页 + 最后 30 页,中间插一页说明页写清略去多少行——成品固定 62 页。注意不是「对半分再各凑 30 页」,代码量一大每页会被撑到几百行。
免责:本页逻辑 1:1 移植自 paginate.mjs,渲染与回读核验(pdfinfo / PDF 页树解析)不在演示范围。规则以中国版权保护中心公布的为准。