# 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** | 开箱即用 | 中文支持 | 批注脱敏 | 多框架集成
[](https://www.npmjs.com/package/jit-pdf)
[](https://www.npmjs.com/package/jit-pdf)
[](https://www.npmjs.com/package/jit-pdf)
[](https://github.com/MrXujiang/jit-pdf-sdk/stargazers)
[](https://github.com/MrXujiang/jit-pdf-sdk/network/members)
[](https://github.com/MrXujiang/jit-pdf-sdk/issues)
[](https://vuejs.org/)
[](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:适合 `