zksdb-report-designer
v0.0.19
Published
<p align="center"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAMW0lEQVR4AezdD3bbNhKAcXYv0t5k05M0OUnakyR7ks1NNjfJYlQ7lWX9ISmQIDA/PyKyKHAw8w3xWXbfU/819fP1saT6w5hGY/Bn6amjEYGeBNAIkWU3JvC5xCeBAqHFQQAtqFvzkgAJXBLZ6TkB7ATa
Readme
最新优化: 移除 6 个第三方大包,首次加载体积减少约 65%;渲染引擎全链路自研,单页渲染耗时由约 300 ms 降至 80 ms(约 −73%);多语言 2 → 6 种,浏览器自动适配。
zksdb-report-designer 是一款可视化报表打印设计器,面向业务表单、标签、票据、快递单等场景,支持模板化、变量化,并提供静默打印与云打印能力,同时兼容多种导出与打印方式。
核心特性
- 可视化设计:全功能拖拽设计器,支持文本 / 图片 / 表格 / 条码 / 二维码 / 形状等组件,内置标尺、网格与辅助对齐。
- 智能分页:自动处理长表格分页,支持表头 / 表尾重复,无需手写复杂逻辑,所见即所得。
- 跨框架支持:基于 Web Components,零依赖适配 Vue / React / Angular / 原生 HTML 等所有技术栈。
- 全场景打印:
- 浏览器打印:原生预览与打印。
- 导出:支持生成 PDF、图片(拼接 / 分片)。
- 客户端打印:支持静默打印(无弹窗直打)与云打印(远程任务下发)。
- 企业级功能:支持自定义纸张、API 数据对接、模板导入导出及精细的打印参数控制(打印机 / 份数 / 单双面 / DPI)。
升级记录
- v0.0.17: 2026-07-14: 优化打印预览
- v0.0.14: 2026-07-14: 重新优化设计器结构
- v0.0.13: 2026-07-13: 优化设计器图标
- v0.0.12: 2026-07-13: 优化打印及打印预览样式
- v0.0.11: 2026-07-13: 优化打印预览窗口给外部调用
- v0.0.10: 2026-07-13: 优化打印预览
- v0.0.9: 2026-07-12: 新增导出excel功能
- v0.0.8: 2026-07-11 优化直线 图片 文本 条码 二维码 旋转 优化单元格对齐
- -v0.0.7: 2026-07-11 修复编辑文本时,文本对齐与元素画布对齐的冲突bug
配套打印客户端(Zksdb Client)
Zksdb Client 是本项目的配套桌面客户端,用于连接本地打印机并执行静默打印任务。安装后,即可在浏览器中直接发起打印而无需弹窗确认。它提供服务控制、连接配置、打印记录、版本更新与打印预览等功能,帮助你在本地快速完成打印闭环。
- 支持平台:Windows / macOS / Linux
- 关键能力:自动发现并识别设备、稳定连接维护与转发队列、轻量后台运行、打印任务记录与版本更新提示
快速开始
方式一:下载源码自行改造与集成 API
适合有深度定制需求的团队。
环境要求
- Node.js >= 16.0.0
- npm >= 7.0.0 或 yarn / pnpm
安装
npm i zksdb-report-designer
# 或
pnpm add zksdb-report-designer
# 或
yarn add zksdb-report-designer1) 在 Vue 3 / Vite 中使用
// main.ts
import "zksdb-report-designer";
import "zksdb-report-designer/style.css";<template>
<zksdb-report-designer id="designer"></zksdb-report-designer>
</template>2) 初始化与调用分离(Vue 3 选项式 API)
设计器页面(初始化与编辑)
<script lang="ts">
export default {
mounted() {
const el = this.$refs.designerRef as any;
el.setBranding({ title: "报表打印设计器", showLogo: true });
el.setTheme("light");
el.loadTemplateData(/* 从你的 API 获取的数据 */);
el.setVariables({ orderNo: "A001" }, { merge: true });
},
};
</script>
<template>
<zksdb-report-designer ref="designerRef"></zksdb-report-designer>
</template>业务页面(打印 / 导出调用)
const el = document.querySelector("zksdb-report-designer") as any;
// 打印
await el.print({ mode: "browser" });
// 导出 PDF / 图片 / HTML / Blob
await el.export({ type: "pdf", filename: "order-20240223.pdf" });
await el.export({ type: "html", filename: "order-20240223.html" });
const pdfBlob = await el.export({ type: "pdfBlob" });3) 事件监听
el.addEventListener("ready", () => {});
el.addEventListener("printed", (e) => {});
el.addEventListener("exported", (e) => {
const blob = e.detail?.blob;
});
el.addEventListener("error", (e) => {
console.error(e.detail?.scope, e.detail?.error);
});项目结构
src/ # 项目源码目录
├── App.vue # 应用根组件
├── main.ts # 应用启动入口
├── style.css # 全局样式
├── web-component.ts # Web Components 注册入口
├── web-component.d.ts # Web Components 类型声明
├── vite-env.d.ts # Vite 环境类型声明
├── assets/ # 静态资源
├── components/ # 页面与编辑器组件
│ ├── PrintDesigner.vue # 设计器主容器组件
│ ├── canvas/ # 画布区域组件
│ ├── common/ # 通用组件(弹窗、选择器等)
│ ├── elements/ # 打印元素组件(文本、图片、表格等)
│ ├── layout/ # 布局组件(头部、侧栏、面板等)
│ ├── print/ # 打印渲染组件
│ └── properties/ # 属性配置组件
├── composables/ # 组合式状态与行为封装
├── constants/ # 常量定义
├── locales/ # 国际化语言包
├── stores/ # Pinia 状态管理
├── types/ # 类型声明
└── utils/ # 通用工具函数
├── print.ts # 兼容导出入口
├── print/ # 打印能力主目录
│ ├── index.ts # 打印模块统一导出
│ ├── usePrint.ts # 打印/导出流程编排入口
│ ├── dom.ts # 打印相关 DOM 处理工具
│ ├── printChannel.ts # 本地/远程打印通道
│ ├── renderEngine.ts # 渲染引擎兼容导出入口
│ └── renderEngine/ # 渲染引擎子模块目录
│ ├── index.ts # 渲染引擎装配入口
│ ├── types.ts # 渲染模块共享类型
│ ├── pagination.ts # 分页算法与布局修正
│ ├── iframeRenderer.ts # iframe 渲染实现
│ └── imageRenderer.ts # 图片/PDF 渲染实现
└── ... # 其他通用工具函数国际化
项目内置 6 种语言:中文简体(zh)、中文繁体(zh-Hant)、英文(en)、日文(ja)、韩文(ko)、德文(de),默认根据浏览器语言自动检测,也可通过 API 手动设置。
