开源免费、AI 驱动的 Web 打印设计器 OpenPrint:从拖拽设计到 ERP 对接全流程实战

开源免费、AI 驱动的 Web 打印设计器 OpenPrint:从拖拽设计到 ERP 对接全流程实战

摘要:OpenPrint 是一款开源、纯前端、零后端依赖的 Web 打印模板设计器。支持拖拽设计快递面单、标签、报表,AI 一句话生成模板,Excel 一键批量打印,云打印与 C++ 桌面静默打印,3 分钟即可对接 ERP 系统。本文从核心特性、技术架构、SDK 接入、打印链路四个维度完整拆解,并附上手代码。

做企业软件开发的工程师应该都经历过这样的场景:客户要求改打印模板里的某个字段、调整套打位置、加个条码,前端写死模板 → 改代码 → 发版 → 客户再反馈 → 再改......一个打印模板的迭代周期常常拉长到一周。更头疼的是,不同客户的模板格式千差万别:快递面单、物流标签、价格签、报表、发票,一套代码很难全覆盖。

有没有一个方案:模板编辑交给业务人员拖拽完成,开发只负责对接?本文介绍的开源项目 OpenPrint,正是这个思路的完整实现。

一、OpenPrint 是什么

OpenPrint 是一款开源、零后端依赖的 Web 打印模板可视化设计器:

  • 纯前端架构 ------ 无需服务器、无需数据库,一个浏览器即可运行

  • 拖拽设计 ------ 快递面单、发票、标签、报表等打印模板可视化编辑,所见即所得

  • AI 生成 ------ 自然语言一句话生成模板

  • 框架无关 ------ 核心渲染引擎与 UI 层完全解耦,可无缝接入 React / Vue / Angular / 原生 JS

    纯前端架构,无需服务器,无需数据库,一个浏览器即可运行。

项目地址(Gitee):https://gitee.com/haiming236/openprint.git

在线演示:https://openprint.yy360.space

所见即所得的打印模板设计器:左侧控件库 + 中间画布 + 右侧属性面板

二、核心特性详解

2.1 拖拽式可视化设计

打开浏览器即可使用,控件库内置 10 种控件:文本、图片、矩形、圆形、线条、条码、二维码、表格、富文本、图表。支持:

  • 自由拖拽 + 吸附对齐 + 标尺辅助
  • 多页设计,每页独立页眉页脚,页间距可调
  • 数据绑定:JSON / CSV / API 数据源,Mustache 表达式绑定
  • 模板管理:本地存储、模板导入/导出、模板市场
  • 实时预览:数据绑定效果实时查看,分页预览
  • 多格式导出:PDF / JPG / SVG / HTML

2.2 AI 一句话生成模板

告别手动拖拽,直接描述需求即可生成专业模板。

复制代码
用户输入:"帮我生成一张快递面单,含收件人、寄件人和运单号条码"
AI 输出:自动创建模板 → 布局文本控件 → 添加条码 → 一键使用

AI 助手支持三种用法:

  1. 新建模板 ------ 输入需求描述,AI 自动生成完整模板
  2. 修改当前模板 ------ 选中控件,让 AI 调整布局或样式
  3. 字段接地 ------ 自动识别数据字段并绑定到模板控件

技术原理:基于 LLM 解析用户意图,输出结构化模板描述;内部规范引擎将描述转换为 Fabric.js 控件配置;支持上下文感知,可在已有模板上增量修改。

AI 自然语言生成打印模板,一句话完成面单设计

2.3 Excel 一键导入 · 百张秒打

把 Excel 流水数据直接导入设计器,自动映射字段、自动生成流水号,批量打印差异化的货物标签、资产标签、流水线标签:

  • Excel 数据直联 ------ 上传表格自动识别列,字段一键映射到标签
  • 流水号自动编排 ------ 支持「分类-年份-序号」自定义规则,如 ZC-2026-0158
  • 一行一标签 ------ 每行数据生成一张独立标签,99 行批量输出 99 张
  • 逐条预览校验 ------ 第 1/99 行分页预览,批量前逐条检查,避免打错
  • 打印实时监控 ------ 进度条 + 成功/失败统计 + 耗时均速

2.4 云打印:跨地域多门店远程打印

  • 模板统一管理,浏览器直接打印,免装驱动
  • 云端打印队列,断线自动重试
  • 权限管控,打印日志审计

云打印队列监控大屏

2.5 Web 报表设计

支持分组表、交叉表、主从表等多级报表结构,求和/平均/计数等汇总函数,嵌入柱状图/折线图/饼图,条件格式高亮数据预警,多数据源拼接。

分组报表、交叉表、图表,满足复杂数据展示需求

三、技术架构:引擎与 UI 解耦

OpenPrint 采用引擎层与 UI 层分离的架构------这是它"框架无关"的根基:

复制代码
┌─────────────────────────────────────────────────────────────────────┐
│                        UI 层(可替换)                               │
│                                                                     │
│   ┌─────────────────┐  ┌──────────────┐  ┌───────────────────────┐ │
│   │ Vue 3 + Naive UI │  │   React      │  │ 原生 JS / Angular     │ │
│   │ 设计器(官方)   │  │  自定义 UI   │  │ iframe / Web Component│ │
│   └────────┬────────┘  └──────┬───────┘  └──────────┬────────────┘ │
│            └───────────────────┴─────────────────────┘              │
│                                │ SDK API                            │
╞════════════════════════════════╪═══════════════════════════════════╡
│                        引擎层(框架无关)                           │
│                                ▼                                    │
│  ┌───────────────────────────────────────────────────────────────┐ │
│  │              排版引擎 (Layout Engine) --- 纯 TypeScript         │ │
│  │   数据绑定 │ 表达式计算 │ 分页引擎 │ 表格引擎 │ 分组引擎     │ │
│  └───────────────────────────┬───────────────────────────────────┘ │
│                              ▼                                     │
│  ┌───────────────────────────────────────────────────────────────┐ │
│  │              渲染引擎 (Renderer) --- 纯 TypeScript              │ │
│  │   HTML 渲染 │ PDF 导出 │ JPG 导出 │ SVG 导出 │ 富文本渲染    │ │
│  └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
                               │
                      ┌────────┴────────┐
                      ▼                 ▼
             ┌──────────────┐  ┌──────────────┐
             │ C++ Qt 客户端 │  │ 云打印服务    │
             │ 静默打印      │  │ 远程打印      │
             └──────────────┘  └──────────────┘

各层职责:

层级 技术 说明
设计器 UI Vue 3 + Naive UI + Fabric.js 官方可视化设计器:拖拽、属性面板、图层管理
排版引擎 纯 TypeScript 模板解析、数据绑定、分页、表格、分组、表达式计算
渲染引擎 纯 TypeScript HTML / PDF / JPG / SVG 多格式渲染导出,零框架依赖
AI 助手 TypeScript LLM 意图解析、模板生成、上下文管理
桌面客户端 C++ + Qt 静默打印、批量打印、打印机管理

核心模块(框架无关部分可独立复用):

模块 源码路径 说明
排版引擎 src/core/layout-engine/ 数据绑定、分页、表格、分组、表达式
渲染引擎 src/core/renderer-html/ HTML 渲染、CSS 生成、富文本渲染
导出引擎 src/core/export-engine/ PDF / JPG / SVG 导出
SDK src/core/sdk/ 引擎对外 API 封装,供任意框架调用
设计器 src/design/ Vue 3 + Naive UI 设计器界面
AI 助手 src/ai/ AI 生成模板、上下文管理
控件库 src/design/canvas/controls/ 10 种 Fabric.js 控件

四、快速上手:SDK 三步接入

4.1 安装

bash 复制代码
# 方式 A:本地路径直连(开发期最省事)
pnpm add file:/绝对路径/open-print

# 方式 B:打成 tgz 分发(约 3.5 MB)
pnpm pack:sdk                          # → openprint26-0.0.0.tgz
pnpm add ./openprint26-0.0.0.tgz

SDK 产物零裸 import (jspdf / katex / bwip-js / opentype 全部已打进包),安装时只会装 openprint26 一个包,不会搅乱业务项目里的 vue / fabric 版本。

注意 :记得把 dist-sdk/fonts/ 复制到业务项目的静态目录(Vite 项目 → public/fonts/),引擎导出 PDF 时会 fetch('/fonts/SourceHanSerifCN.ttf')。

4.2 React 项目:引擎直接渲染

tsx 复制代码
import { useEffect, useRef } from 'react'
import { render } from 'openprint26'

export default function App() {
  const containerRef = useRef<HTMLDivElement>(null)

  useEffect(() => {
    render({ template: templateJson, data }).then(({ html, pages, warnings }) => {
      containerRef.current!.innerHTML = html
      console.log('共', pages, '页;告警:', warnings)
    })
  }, [])

  return <div ref={containerRef} />
}

4.3 原生 JS / 任意框架:渲染 + 导出

ts 复制代码
import { render, createHeadless } from 'openprint26'

// 1. 渲染模板为 HTML(异步:二维码等资源在渲染期解析)
const { html, pages, warnings } = await render({
  template: templateJson,
  data: {
    sender_name: '张三',
    receiver_name: '李四',
    tracking_no: 'SF1234567890',
  },
})
document.getElementById('print-area').innerHTML = html

// 2. 导出 PDF / JPG / SVG
const headless = createHeadless()
const { blobs, filenames } = await headless.exportPdf({ template: templateJson, data })
blobs.forEach((b, i) => downloadBlob(b, filenames[i]))
headless.dispose()

Node 服务端仅渲染 HTML(不依赖 DOM):

ts 复制代码
import { render } from 'openprint26/node'
const { html } = await render({ template: templateJson, data })

4.4 Vue 项目:嵌入完整设计器 <print-designer>

设计器以 iframe 薄桥接嵌入,宿主侧零框架依赖:

ts 复制代码
import { definePrintDesigner } from 'openprint26'
definePrintDesigner() // 注册 <print-designer>,全局只需一次
html 复制代码
<!-- 不写 src = 用 SDK 自带的完整设计器:零配置、不依赖任何在线地址 -->
<print-designer id="d" license-key="eyJkYXRh..." style="display:block;height:820px"></print-designer>

内置设计器(约 5.9 MB / gzip 1.9 MB)按需动态加载 ,只在用到 <print-designer> 时才下载,普通渲染/导出/打印不受影响。

4.5 体积指标

  • 核心引擎约 190 kB(gzip ~57 kB)
  • 条码、二维码、公式(KaTeX)与 jspdf 均按需加载------模板里没有对应控件就不会下载
  • 实测业务项目 vite build 后入口主包仅 1.6 kB,其余走按需 chunk

五、打印链路全览

三种打印方式覆盖从"浏览器快速打印"到"无人值守批量打印"的全部场景:

方式 场景 特点
Web 直接打印 单机/少量 浏览器调用系统打印对话框
桌面静默打印 批量/自动化 配套 C++ Qt 客户端,零弹窗打印
云打印 多门店/远程 远程门店打印、打印队列管理、断线重试

HTTP API 对接,3 分钟接入 ERP

六、从源码运行与在线体验

bash 复制代码
git clone https://gitee.com/haiming236/openprint.git
cd open-print
pnpm install
pnpm dev        # 启动开发服务器
pnpm build      # 构建生产版本
pnpm preview    # 预览生产构建

环境要求:Node.js >= 22.18.0 ,pnpm >= 9.x。

不想本地跑?直接访问在线演示站点:https://openprint.yy360.space,浏览器打开即可体验完整设计器。

七、适用场景

  • 电商/物流:快递面单(顺丰、京东、邮政格式)、物流标签(运单号、目的地、重量)
  • 仓储/制造:货物 SKU 标、资产标识、流水线 SN 码、仓储码、盘点单
  • 零售/餐饮:收银小票、退换货单
  • 财务:增值税发票、收据
  • 企业系统:ERP / 进销存 / WMS / 门店系统接入打印能力,报表自定义设计

八、总结

OpenPrint 的核心价值在于把"改打印模板"这件事从开发者的工作里彻底剥离:

  1. 业务自己改模板 ------ 拖拽设计器 + AI 生成,模板迭代不再依赖发版
  2. 开发只做对接 ------ 框架无关的引擎 SDK,render({ template, data }) 一行出 HTML,3 分钟接入 ERP
  3. 打印链路完整 ------ Web 直打 / C++ 静默打 / 云打印三轨并行,覆盖单机到多门店
  4. 开源免费 ------ GPL-3.0 协议,纯前端零依赖,一个浏览器即可运行

如果你正在为企业系统的打印能力犯愁,或者想找一个可直接嵌入业务的打印组件,不妨把 OpenPrint 拉下来试试。


如果本文对你有帮助,欢迎点赞、收藏、关注;有问题欢迎在评论区交流。

相关推荐
web打印社区1 小时前
HTML5 静默打印:前端页面怎么调用打印机且尽量不弹窗
前端·javascript·vue.js·pdf·html·html5
唐维康1 小时前
昆明理工大学817通信工程考研名额一年比一年少
人工智能·考研·昆明理工大学·昆明理工大学通信考研
Sammyyyyy1 小时前
结构化决策模型 Jev 实战笔记,3 个原语、4 个限制、5 个落地场景
人工智能·笔记·开发工具·编程语言
麦豆GEO1 小时前
ToB企业的GEO战略:AI搜索时代,品牌如何构建知识资产与专业影响力
大数据·人工智能
康实训1 小时前
营养实训室建设要点与落地标准解析
大数据·人工智能·实训室·实训室建设
溪语流沙1 小时前
【每天一个CSS | Day11】赛博朋克故障风文字:红青分离 + 切片抖动
前端·css
数聚天成DeepSData1 小时前
公开数据怎么找才可用?DeepSData 从需求到验收的实操流程
人工智能·深度学习·机器学习·数据集·deepsdata
正经教主1 小时前
【FDE系列】阶段3:Day 65:向量数据库入门 — Chroma 与本周收官
人工智能·rag·fde
ai小陈1 小时前
深度学习CUDA异步报错定位:从错误堆栈到最小复现
运维·人工智能·深度学习·ai·gpu算力