refactor(文书纸): 抽出 A4_PAPER_MM 统一屏纸与 PDF 的页边距口径

This commit is contained in:
yelan
2026-09-27 14:48:43 +08:00
parent 7597b4764f
commit 39d27ae5e7
2 changed files with 76 additions and 18 deletions
+23 -8
View File
@@ -16,16 +16,31 @@
* 输出为位图 PDF:文本不可选中,仅供原型演示;正式文书以服务端生成的 PDF 为准。
*/
const PAGE_WIDTH_MM = 210
const PAGE_HEIGHT_MM = 297
const MARGIN_X_MM = 15
const MARGIN_TOP_MM = 12
const MARGIN_BOTTOM_MM = 14
const CONTENT_WIDTH_MM = PAGE_WIDTH_MM - MARGIN_X_MM * 2
import { A4_CONTENT_WIDTH_MM, A4_CONTENT_WIDTH_PX, A4_PAPER_MM } from './document-paper'
const PAGE_WIDTH_MM = A4_PAPER_MM.width
const PAGE_HEIGHT_MM = A4_PAPER_MM.height
/**
* 页边距与屏幕上的纸**同一份口径**(`utils/document-paper.ts` 的 `A4_PAPER_MM`)。
*
* ⚠️ 这里曾经自己写死 15 / 12 / 14mm,与屏幕的 31.75 / 14.34mm 对不上 ——
* 表现为「下载的 PDF 和预览的边距不一样」,而且版心宽度也差 33mm、换行位置跟着变。
* **不要再在这里写 mm 数字**,要调就调 `A4_PAPER_MM`。
*/
const MARGIN_X_MM = A4_PAPER_MM.marginX
const MARGIN_TOP_MM = A4_PAPER_MM.marginY
const MARGIN_BOTTOM_MM = A4_PAPER_MM.marginY
const CONTENT_WIDTH_MM = A4_CONTENT_WIDTH_MM
const CONTENT_HEIGHT_MM = PAGE_HEIGHT_MM - MARGIN_TOP_MM - MARGIN_BOTTOM_MM
/** 截图版心宽度(px):约等于 180mm @96dpi,让 PDF 版面接近实际纸张 */
const CAPTURE_WIDTH_PX = 680
/**
* 截图版心宽度(px)= 屏幕上纸的版心宽度(`A4_CONTENT_WIDTH_PX`)。
*
* 为什么必须是这个值而不是「约 180mm @96dpi」:截图时把克隆体宽度钉成它,
* 正文的换行位置才与屏幕完全一致(都是同一个版心宽);
* 再按 `CONTENT_WIDTH_MM / canvas.width` 缩放铺进 PDF,物理尺寸也就对了。
*/
const CAPTURE_WIDTH_PX = A4_CONTENT_WIDTH_PX
/** 截图倍率:2 倍下正文与小字都还清晰 */
const CAPTURE_SCALE = 2
/** 量不到页眉时的兜底高度(px) */