# jit-pdf-sdk **Repository Path**: lzdn/jit-pdf-sdk ## Basic Information - **Project Name**: jit-pdf-sdk - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-10 - **Last Updated**: 2026-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Jit PDF
🎨 **企业级 PDF 在线预览与编辑 SDK** | 开箱即用 | 中文支持 | 批注脱敏 | 多框架集成 [![npm version](https://img.shields.io/npm/v/jit-pdf.svg?style=flat-square)](https://www.npmjs.com/package/jit-pdf) [![npm downloads](https://img.shields.io/npm/dm/jit-pdf.svg?style=flat-square)](https://www.npmjs.com/package/jit-pdf) [![npm license](https://img.shields.io/npm/l/jit-pdf.svg?style=flat-square)](https://www.npmjs.com/package/jit-pdf) [![GitHub stars](https://img.shields.io/github/stars/MrXujiang/jit-pdf-sdk?style=flat-square)](https://github.com/MrXujiang/jit-pdf-sdk/stargazers) [![GitHub forks](https://img.shields.io/github/forks/MrXujiang/jit-pdf-sdk?style=flat-square)](https://github.com/MrXujiang/jit-pdf-sdk/network/members) [![GitHub issues](https://img.shields.io/github/issues/MrXujiang/jit-pdf-sdk?style=flat-square)](https://github.com/MrXujiang/jit-pdf-sdk/issues) [![Vue.js](https://img.shields.io/badge/Vue-3.5+-42b883.svg?style=flat-square&logo=vue.js)](https://vuejs.org/) [![TypeScript](https://img.shields.io/badge/TypeScript-5.8+-3178c6.svg?style=flat-square&logo=typescript)](https://www.typescriptlang.org/) [快速开始](#快速开始) · [功能特性](#功能概览) · [接入示例](#快速开始) · [API 文档](#核心-api) · [示例代码](#示例与文档)
--- ## 📖 简介 **Jit PDF** 是一套面向业务系统的 **PDF 预览与编辑 SDK**,提供开箱即用的中文界面、蓝色主题工作台、批注与脱敏能力,以及本地存储和服务端文件服务两种接入模式。 它适合这些场景: - 🏢 **OA / ERP / 电子档案 / 合同审阅** - 企业内部文档管理系统 - 📝 **内部文档系统的 PDF 在线查看与批注** - 快速集成 PDF 工作能力 - 🔧 **低代码平台、传统 JSP / Thymeleaf / PHP 页面中的嵌入式 PDF 工作台** - 兼容各种技术栈 - 🎯 **Vue 项目、静态 HTML 页面,以及需要"挂载式"集成的多框架项目** - 灵活集成方式 ## ✨ 亮点 - 🎨 **开箱即用的专业界面**:内置工具栏、缩略图导航、浮动属性面板、批注管理抽屉 - 🇨🇳 **完整中文体验**:默认中文文案、蓝色主题、适合企业系统集成 - ✏️ **常用编辑能力**:高亮、便签、自由文本、涂鸦、删除批注、批量管理批注 - 🔍 **审阅与输出**:全文搜索、脱敏、另存副本、历史副本查看 - 🚀 **大文件友好**:支持服务端 `Range` 流式读取,适配本地文件服务 - 💾 **双存储模式**:支持纯前端 `IndexedDB` 模式,也支持 `NestJS` 文件服务模式 - 🔌 **多接入形式**:支持 `npm` 引入、浏览器挂载入口、UMD ` ``` 全局变量名为: ```js window.JitPdfSdk ``` ### 3. 浏览器直接试用 你可以直接在浏览器中打开示例文件进行试用: ```bash # 克隆项目后 pnpm install pnpm dev ``` 访问 `http://localhost:5173` 即可查看完整演示。 ## 🚀 快速开始 ### Vue 3 项目接入(纯本地模式) 下面示例使用纯本地模式,不依赖服务端: ```vue ``` ### Vue 3 + 服务端文件模式(推荐生产环境) 如果你希望用本地文件服务、流式预览和副本保存: ```ts import { createHttpPdfEditorService } from "jit-pdf"; const service = createHttpPdfEditorService({ baseUrl: "http://localhost:4000", annotationDatabaseName: "jit-pdf-annotations" }); ``` ```vue ``` ### 纯 HTML 页面接入(零框架依赖) ```html Jit PDF Demo
``` ### React / Angular / 任意框架项目(挂载式集成) 如果你不是 Vue 项目,但使用现代打包器,也可以通过浏览器挂载入口来集成: ```bash pnpm add jit-pdf vue # 或 npm install jit-pdf vue ``` ```tsx import { useEffect, useRef } from "react"; import "jit-pdf/styles.css"; import { createIndexedDbPdfEditorService, mountJitPdfEditor } from "jit-pdf/browser"; const service = createIndexedDbPdfEditorService({ databaseName: "jit-pdf-react-demo" }); export function PdfPanel({ fileId, fileName }: { fileId: string; fileName?: string }) { const containerRef = useRef(null); useEffect(() => { if (!containerRef.current) return; const mounted = mountJitPdfEditor({ target: containerRef.current, source: { type: "local", fileId, name: fileName }, service, locale: "zh-CN", theme: "blue-enterprise" }); return () => mounted.unmount(); }, [fileId, fileName]); return
; } ``` 适用范围: - React - Next.js 客户端组件 - Angular - Umi / Micro Frontends - 低代码平台自定义组件容器 ## 🗂️ 数据模式 ### 模式一:纯本地模式(推荐用于 POC/演示) 适合: - ✅ 无后端接入 - ✅ 本地调研、POC、组件演示 - ✅ 希望 PDF 与批注都保存在浏览器端 使用: - `createIndexedDbPdfEditorService()` - 文件保存到 `IndexedDB` - 批注快照也保存到 `IndexedDB` ### 模式二:服务端文件模式(推荐用于生产环境) 适合: - ✅ 本地文件目录预览 - ✅ 大文件流式读取 - ✅ 需要上传、删除、另存副本、历史副本 使用: - `createHttpPdfEditorService()` - 文件流通过 `/api/files/:id/content` - 批注默认仍保存在浏览器 IndexedDB,可按项目需要二次扩展为服务端持久化 ## 核心 API ### 组件入口 ```ts import { JitPdfEditor } from "jit-pdf"; ``` ### 服务工厂 ```ts import { createHttpPdfEditorService, createIndexedDbPdfEditorService } from "jit-pdf"; ``` ### 浏览器挂载入口 ```ts import { mountJitPdfEditor } from "jit-pdf/browser"; ``` ### 常用类型 ```ts import type { PdfSource, PdfEditorService, JitPdfEditorProps } from "jit-pdf"; ``` ## 对外类型 ### `PdfSource` ```ts type PdfSource = | { type: "remote"; fileId: string; name?: string } | { type: "local"; fileId: string; name?: string } | { type: "url"; url: string; name?: string }; ``` ### `PdfEditorService` ```ts interface PdfEditorService { getFileList(): Promise; getFileMeta(fileId: string): Promise; getFileHistory(fileId: string): Promise; getFileStreamUrl(fileId: string): string; uploadFile(file: File): Promise; deleteFile(fileId: string): Promise; saveCopy(input: SaveCopyInput): Promise; loadAnnotations(fileId: string): Promise; saveAnnotations(fileId: string, annotations: PdfAnnotationSnapshot[]): Promise; } ``` ### `JitPdfEditorProps` ```ts interface JitPdfEditorProps { source: PdfSource; locale?: "zh-CN"; theme?: "blue-enterprise"; capabilities?: Partial; service: PdfEditorService; readonly?: boolean; } ``` ## 事件 `JitPdfEditor` 和 `mountJitPdfEditor()` 都支持这些生命周期事件: - `ready` - `dirty-change` - `save-start` - `save-success` - `save-error` - `load-error` 浏览器挂载示例: ```ts mountJitPdfEditor({ target: "#app", source, service, onReady(event) { console.log("文档已就绪", event.documentId); }, onSaveSuccess(result) { console.log("副本保存成功", result.relativePath); }, onLoadError(error) { console.error("加载失败", error.message); } }); ``` ## 打包产物 `packages/pdf-sdk` 会输出以下产物: - `dist/index.js` - `dist/index.cjs` - `dist/browser.js` - `dist/browser.cjs` - `dist/jit-pdf.umd.js` - `dist/style.css` 对应关系: - `jit-pdf`:Vue / ESM / CJS 项目入口 - `jit-pdf/browser`:挂载式入口 - `jit-pdf/styles.css`:公共样式 - UMD:适合 `