# openprint **Repository Path**: waynelee/openprint ## Basic Information - **Project Name**: openprint - **Description**: OpenPrint是一款开源、零后端依赖的 Web 打印模板可视化设计器。它让用户通过拖拽即可设计快递面单、发票、标签、报表等打印模板,支持 AI 一句话生成、云打印、C++ 桌面客户端静默打印,3 分钟即可对接 ERP 系统。 - **Primary Language**: TypeScript - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: https://op.yy360.space - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 35 - **Created**: 2026-08-17 - **Last Updated**: 2026-08-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

OpenPrint Logo

OpenPrint

开源 Web 打印设计器 · AI 驱动 · 框架无关 · 跨平台

Stars Release License Vue 3 Naive UI TypeScript Fabric.js npm

功能特性 · 快速开始 · AI 助手 · 架构 · 部署 · FAQ


🚀 **诚邀开发者加入** — 我们欢迎全球开发者加入 OpenPrint 开源社区,共同参与产品研发,贡献代码、提交 Issue 或建议,一起打造更优秀的打印解决方案! **OpenPrint** 是一款开源、零后端依赖的 Web 打印模板可视化设计器。它让用户通过拖拽即可设计快递面单、发票、标签、报表等打印模板,支持 AI 一句话生成、云打印、C++ 桌面客户端静默打印,3 分钟即可对接 ERP 系统。 > 纯前端架构,无需服务器,无需数据库,一个浏览器即可运行。 > **框架无关设计** — 核心渲染引擎与 UI 层完全解耦,设计器基于 Vue 3 + Naive UI 构建,渲染引擎使用纯 TypeScript 实现,可无缝接入 React、Vue、Angular、原生 JS 等任意技术栈。 ![设计器界面](screenshots/designer-overview.png) *所见即所得的打印模板设计器,拖拽控件、实时预览* --- ## 目录 - [核心亮点](#核心亮点) - [功能特性](#功能特性) - [快速开始](#快速开始) - [AI 助手](#ai-助手) - [技术架构](#技术架构) - [项目结构](#项目结构) - [部署](#部署) - [桌面客户端](#桌面客户端) - [ERP 对接](#erp-对接) - [FAQ](#faq) - [贡献指南](#贡献指南) - [许可证](#许可证) --- ## 核心亮点 ### 🔌 框架无关,引擎与 UI 解耦 OpenPrint 采用**引擎层与 UI 层分离**的架构设计: - **渲染引擎**(`@openprint/engine`)— 纯 TypeScript 实现,零框架依赖,负责模板解析、数据绑定、分页排版、HTML/PDF/SVG 渲染导出 - **设计器 UI**(`openprint26`)— 基于 Vue 3 + Naive UI 构建可视化拖拽设计器 无论你的项目用 **React、Vue、Angular** 还是 **原生 JS**,都能轻松集成: | 接入方式 | 说明 | |----------|------| | **Vue 3 项目** | 直接安装 `openprint26`,使用 `` 组件 | | **React 项目** | 通过引擎 SDK 渲染模板,或用 Web Components 包装设计器 | | **Angular 项目** | 引擎 SDK 渲染 + iframe 嵌入设计器 | | **原生 JS / 任何框架** | 引擎 SDK 零依赖,`renderTemplate(json, data)` 即可输出 HTML | ### 🤖 AI 一句话生成模板 告别手动拖拽,直接描述需求即可生成专业打印模板。支持快递面单、物流标签、仓储单据、零售小票等多种场景。 ![AI 助手](screenshots/ai-assistant.png) *AI 自然语言生成打印模板,一句话完成面单设计* ``` 用户输入:"帮我生成一张快递面单,含收件人、寄件人和运单号条码" AI 输出: 自动创建模板 → 布局文本控件 → 添加条码 → 一键使用 ``` ### ☁️ 云打印 跨地域多门店远程打印,模板统一管理。浏览器直接打印,免装驱动。云端打印队列,断线自动重试,权限管控,打印日志审计。 ![云打印](screenshots/cloud-print.jpg) *多门店远程打印,模板统一管理,打印队列监控* ### 📊 Web 报表设计 分组表、交叉表、主从表等多级报表结构,支持求和/平均/计数等汇总函数,嵌入柱状图/折线图/饼图,条件格式高亮数据预警,多数据源拼接。 ![报表设计](screenshots/report-design.png) *分组报表、交叉表、图表,满足复杂数据展示需求* --- ## 功能特性 ### 设计器 | 功能 | 说明 | |------|------| | **控件库** | 文本、图片、矩形、圆形、线条、条码、二维码、表格、富文本、图表 10 种控件 | | **拖拽设计** | 所见即所得,自由拖拽 + 吸附对齐 + 标尺辅助 | | **多页支持** | 多页设计,每页独立页眉页脚,页间距可调 | | **数据绑定** | 支持 JSON / CSV / API 数据源,Mustache 表达式绑定 | | **主题切换** | 基于 Naive UI 的深色/浅色主题,一键切换 | | **框架无关** | 引擎层纯 TypeScript,支持 React/Vue/Angular/原生 JS | | **模板管理** | 本地存储,模板导入/导出,模板市场 | | **实时预览** | 预览数据绑定效果,分页预览 | | **导出** | PDF / JPG / SVG / HTML 多格式导出 | ### 打印与对接 - **Web 直接打印** — 浏览器调用系统打印对话框 - **桌面静默打印** — 配套 C++ Qt 客户端,零弹窗打印 - **云打印** — 远程门店打印,打印队列管理 - **ERP 对接** — HTTP API 对接,3 分钟接入 ### 技术栈 #### 设计器 UI 层 ![Vue 3](https://img.shields.io/badge/Vue_3-4FC08D?style=flat-square&logo=vue.js&logoColor=white) ![Naive UI](https://img.shields.io/badge/Naive_UI-18A058?style=flat-square&logo=naiveui&logoColor=white) ![Fabric.js](https://img.shields.io/badge/Fabric.js-7.x-blue?style=flat-square) ![Pinia](https://img.shields.io/badge/Pinia-FFD859?style=flat-square&logo=pinia&logoColor=black) #### 核心引擎层(框架无关) ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white) ![Vite](https://img.shields.io/badge/Vite-646CFF?style=flat-square&logo=vite&logoColor=white) ![Vitest](https://img.shields.io/badge/Vitest-6E9F18?style=flat-square&logo=vitest&logoColor=white) ![UnoCSS](https://img.shields.io/badge/UnoCSS-333333?style=flat-square&logo=unocss&logoColor=white) > 引擎层零框架依赖,设计器 UI 基于 Vue 3 + Naive UI。React / Angular / 原生 JS 项目均可通过引擎 SDK 集成。 --- ## 快速开始 ### npm 安装(推荐) ```bash # npm npm i openprint26 # pnpm pnpm add openprint26 # yarn yarn add openprint26 ``` ### Vue 3 项目使用 ```ts import { createApp } from 'vue' import OpenPrint from 'openprint26' import 'openprint26/dist/style.css' const app = createApp(App) app.use(OpenPrint) app.mount('#app') ``` ```vue ``` ### React 项目使用 设计器通过 iframe 嵌入,渲染引擎通过 SDK 直接调用: ```tsx import { useEffect, useRef } from 'react' import { renderTemplate, exportPDF } from 'openprint26/sdk' export default function App() { const containerRef = useRef(null) useEffect(() => { // 引擎渲染 — 零框架依赖,直接输出 HTML const html = renderTemplate(templateJson, data) containerRef.current!.innerHTML = html }, []) return ( <> {/* 设计器:iframe 嵌入 */}