vue-print-designer

33,337 205
Install
npm install vue-print-designer
Latest Version:1.7.40
Vue:3
License:AGPL-3.0-only
Last Updated:Oct 21, 2026
Links: GitHub  ·  npm
Maintainer: jonny-xiang

最新优化: 移除 6 个第三方大包,首次加载体积减少约 65%;渲染引擎全链路自研,单页渲染耗时由约 300 ms 降至 80 ms(约 −73%);多语言 2 → 6 种,浏览器自动适配。


Vue Print Designer 是一款可视化打印设计器,面向业务表单、标签、票据、快递单等场景,支持模板化、变量化,并提供静默打印与云打印能力,同时兼容多种导出与打印方式。

在线演示: https://0ldfive.github.io/Vue-Print-Designer/


社区交流

欢迎加入 QQ 群,交流功能使用、二次开发与问题排查。QQ 群号:1038069636


界面预览


核心特性

  • 可视化设计:全功能拖拽设计器,支持文本 / 图片 / 表格 / 条码 / 二维码 / 形状等组件,内置标尺、网格与辅助对齐。
  • 智能分页:自动处理长表格分页,支持表头 / 表尾重复,无需手写复杂逻辑,所见即所得。
  • 跨框架支持:基于 Web Components,零依赖适配 Vue / React / Angular / 原生 HTML 等所有技术栈。
  • 全场景打印:
    • 浏览器打印:原生预览与打印。
    • 导出:支持生成 PDF、图片(拼接 / 分片)。
    • 客户端打印:支持静默打印(无弹窗直打)与云打印(远程任务下发)。
  • 企业级功能:支持自定义纸张、API 数据对接、模板导入导出及精细的打印参数控制(打印机 / 份数 / 单双面 / DPI)。

配套打印客户端(PrintDot Client)

PrintDot Client 是本项目的配套桌面客户端,用于连接本地打印机并执行静默打印任务。安装后,即可在浏览器中直接发起打印而无需弹窗确认。它提供服务控制、连接配置、打印记录、版本更新与打印预览等功能,帮助你在本地快速完成打印闭环。

  • 支持平台:Windows / macOS / Linux
  • 关键能力:自动发现并识别设备、稳定连接维护与转发队列、轻量后台运行、打印任务记录与版本更新提示
  • 下载地址:https://printdot.cc/client

集成示例

基于 Vue 3 + Element Plus 的完整集成示例,演示如何在实际业务系统中嵌入打印设计器。


快速开始

方式一:npm 组件(Web Components)了解 Web Components

适合任何技术栈(Vue / React / Angular / 原生)。Web Components 方式支持 Vue 2(作为自定义元素使用),无需 Vue 2 组件适配。

详细参数、CRUD 与 JSON 示例请查看:Web Components API 用户手册

安装
npm i vue-print-designer
# 或
pnpm add vue-print-designer
# 或
yarn add vue-print-designer
1) 在 Vue 3 / Vite 中使用
// main.ts
import "vue-print-designer";
import "vue-print-designer/style.css";
<template>
  <print-designer id="designer"></print-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>
  <print-designer ref="designerRef"></print-designer>
</template>

业务页面(打印 / 导出调用)

const el = document.querySelector("print-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);
});

方式二:下载源码自行改造与集成 API

适合有深度定制需求的团队。

环境要求
  • Node.js >= 16.0.0
  • npm >= 7.0.0 或 yarn / pnpm
建议接入点
  • 模板 CRUD:useTemplateStore(可替换为接口读写)
  • 自定义元素 CRUD:useDesignerStore 中的 customElements
  • 变量与模板数据:组件实例方法 setVariables / loadTemplateData

自定义元素扩展请查看:自定义元素扩展指南


国际化

项目内置 6 种语言:中文简体(zh)、中文繁体(zh-Hant)、英文(en)、日文(ja)、韩文(ko)、德文(de),默认根据浏览器语言自动检测,也可通过 API 手动设置。


License

AGPL-3.0-only

品牌与 Logo 使用请遵循 TRADEMARKS.md。如需移除或替换品牌标识,请参考 COMMERCIAL_LICENSE.md。

Version History

Version Released License
1.7.40 AGPL-3.0-only
1.7.39 AGPL-3.0-only
1.7.38 AGPL-3.0-only
1.7.37 AGPL-3.0-only
1.7.36 AGPL-3.0-only