介绍
曦寒打印设计器(XiHan.PrintDesigner)是一款框架无关的打印设计器:以原生 Web Components 交付,可视化设计打印模板,在浏览器里按数据分页、预览与打印;配合本地打印客户端,还能不弹对话框直接打到指定的打印机。属于曦寒懿(XiHanFun)开源生态,采用 MIT 授权。
能做什么
| 场景 | 用什么 |
|---|---|
| 设计与修改模板 | <xh-print-designer>:物料面板、标尺与参考线、吸附对齐、属性面板、问题列表、表格编辑、撤销重做,可切到预览态 |
| 在业务页面里预览、打印 | <xh-print-preview>:按数据排出全部输出页逐页显示,调起浏览器的打印对话框 |
| 不显示预览直接打印 | printDocument(schema, data):在隐藏的 iframe 里排版并调起打印对话框 |
| 静默打印、原始指令、导出 PDF | 本地打印客户端,经 @xihan-print/runtime/client 连接 |
设计原则
- 框架无关:以原生 Web Components 交付,不绑定任何前端框架。元素用 Light DOM,样式只消费 XiHan.UI 的设计令牌。
- 零第三方依赖:运行时只依赖
@xihan-print/*与@xihan-ui/*,条码、二维码、受限表达式与格式化都来自 XiHan.UI。 - 模板即数据:模板是纯 JSON,不含也不执行任何代码。需要计算的地方用受限表达式,导入模板不会带来脚本注入。
- 数据由使用方掌控:组件不发网络请求。模板存在哪里、数据从哪里取、谁能改模板,都由使用方决定,经属性与事件交给组件。
- 没有全局状态:不往
window上挂对象,不读写固定键名的本地存储,同一页面放多个实例互不影响。
包与入口
| 入口 | 内容 |
|---|---|
@xihan-print/core | 模板的类型定义、校验、编辑操作与分页算法。纯 TypeScript,不依赖 DOM,浏览器与 Node.js 里都能用 |
@xihan-print/runtime | 业务页面用的 <xh-print-preview>、printDocument 与浏览器打印,样式在 @xihan-print/runtime/style.css |
@xihan-print/runtime/client | 连接本地打印客户端:静默打印、原始指令、导出 PDF;不用客户端的页面不会加载这部分代码 |
@xihan-print/runtime/locale | 各语言的语言包,如 printZhCN、printJaJP,与 XiHan.UI 的内建语言包一一对应,预览与设计器共用 |
@xihan-print/designer | <xh-print-designer>,样式在 @xihan-print/designer/style.css |
依赖方向固定为 designer → runtime → core。业务页面只需要 runtime,设计器只在需要编辑模板的地方加载。
工作流程
text
设计器 <xh-print-designer>
│ schema-change / save 事件
▼
宿主保存模板 JSON(数据库、文件,由宿主决定)
│
▼
业务页面取模板与数据
├─ <xh-print-preview> 或 printDocument ──▶ 浏览器打印对话框
└─ @xihan-print/runtime/client ──▶ 本地打印客户端 ──▶ 打印机 / PDF- 设计:在设计器里编辑模板,设计器派发
schema-change与save,宿主把模板 JSON 存起来。 - 打印:业务页面取出模板与数据,交给
<xh-print-preview>预览与打印,或者直接调用printDocument。 - 静默打印:装了本地打印客户端时,交给客户端打到指定的打印机;连不上客户端时退回浏览器的打印对话框。
运行环境
@xihan-print/core不依赖 DOM,可以在浏览器、Node.js 或其它 JavaScript 运行环境里校验模板、排出输出页。@xihan-print/runtime与@xihan-print/designer要在支持 Custom Elements 的浏览器里运行,文字度量缺省用 Canvas 2D。- 本地打印客户端是 Windows 托盘程序,有 x64 与 arm64 两种安装包,渲染用系统的 WebView2 运行时。
