产品概述
什么是 BentoPDF?
BentoPDF 是一个强大的、以隐私为优先的客户端 PDF 工具包,完全在浏览器中运行,无需任何服务器端处理。它提供了超过 100 种 PDF 处理工具,包括合并、拆分、转换、编辑、签名等功能,所有操作都在本地完成,确保您的文件安全和隐私。
产品优势
- 隐私优先: 所有文件处理完全在用户浏览器中进行,不上传到任何服务器
- 完全免费: 核心功能完全免费,开源可用
- 无限制: 没有文件大小限制、没有使用次数限制
- 自托管: 可以轻松部署在任何静态托管服务上
- 多语言: 支持 20+ 种语言,包括中文简体和繁体
- 双许可: AGPL-3.0 开源许可 + 商业许可
核心能力
PDF 组织与管理

PDF 编辑与修改

格式转换(转换为 PDF)
支持将以下格式转换为 PDF:
- 图像格式: JPG、PNG、BMP、GIF、TIFF、WebP、HEIC、SVG、PSD
- 文档格式: Word、Excel、PowerPoint、ODT、ODS、ODP、RTF、TXT
- 电子书格式: EPUB、MOBI、FB2
- 其他格式: CSV、Markdown、JSON、XML、CBZ、电子邮件 (EML/MSG)、Apple Pages、WordPerfect (WPD)、WPS Office、Microsoft Publisher (PUB)、Microsoft Visio (VSD/VSDX)
格式转换(从 PDF 转出)
支持将 PDF 转换为以下格式:
- 图像格式: JPG、PNG、WebP、BMP、TIFF、SVG
- 文档格式: Word、Excel、CSV、Text、Markdown
- 其他格式: JSON、CBZ(漫画)、灰度 PDF
OCR 与识别

PDF 安全与优化

热门工具
竞品对比
BentoPDF vs 在线 PDF 工具

BentoPDF vs 其他开源 PDF 工具

设计理念
核心理念
1.隐私第一(Privacy First)
BentoPDF 的设计核心原则是保护用户隐私:
- 零上传架构: 所有文件处理完全在用户浏览器中进行
- 无服务器依赖: 不需要任何后端服务器处理
- 数据最小化: 不收集用户的文件数据
- 本地存储: 所有配置和设置存储在用户本地浏览器中
2.渐进式功能(Progressive Enhancement)
BentoPDF 采用渐进式增强的设计理念:
- 核心功能优先: 基础 PDF 处理功能无需额外依赖
- 可选 WASM 模块: 高级功能通过 WASM 模块提供,按需加载
- 降级处理: 如果高级功能不可用,提供替代方案或友好提示
- 用户可配置: 用户可以自定义 WASM 模块的来源和配置
3.可扩展性与可定制性
BentoPDF 设计时充分考虑了可定制需求:
- 可禁用工具: 可以在构建时或运行时禁用特定工具
- 自定义品牌: 支持修改 Logo、品牌名称和页脚文本
- 多种部署模式: 完整模式、简洁模式、子目录部署等
- 多语言支持: 易于添加新的语言翻译
4.性能优化
- 按需加载: WASM 模块仅在需要时加载
- Web Workers: 复杂计算在后台线程中进行,不阻塞 UI
- 智能缓存: 常用资源进行本地缓存
- 代码分割: 按工具模块进行代码分割,减少初始加载
5.安全设计
- 非 root 运行: Docker 容器使用非 root 用户
- 安全头配置: 完善的 CSP、COOP、COEP 等安全头
- 内容验证: 对用户输入进行严格验证和清理
- 最小权限: 遵循最小权限原则
架构设计原则
- 1.模块化设计: 每个工具相对独立,便于维护和扩展
- 2.依赖注入: 通过配置管理外部依赖(WASM 模块)
- 3.事件驱动: 使用事件机制解耦组件间通信
- 4.类型安全: 全面使用 TypeScript 确保代码质量
- 5.测试覆盖: 使用 Vitest 进行单元和集成测试
技术架构
系统架构图
┌─────────────────────────────────────────────────────────────────┐│ 用户界面层 (UI) │├─────────────────────────────────────────────────────────────────┤│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ ││ │ 工具页面 │ │ 主页/搜索 │ │ PDF 编辑器/查看器 │ ││ └──────────────┘ └──────────────┘ └────────────────────────┘ ││ ┌──────────────────────────────────────────────────────────┐ ││ │ 工作流构建器 (Rete.js) │ ││ └──────────────────────────────────────────────────────────┘ │├─────────────────────────────────────────────────────────────────┤│ 业务逻辑层 (Logic) │├─────────────────────────────────────────────────────────────────┤│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ ││ │ PDF 操作 │ │ 格式转换 │ │ OCR/识别引擎 │ ││ └──────────────┘ └──────────────┘ └────────────────────────┘ ││ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ ││ │ 签名/加密 │ │ 工作流引擎 │ │ 表单处理 │ ││ └──────────────┘ └──────────────┘ └────────────────────────┘ │├─────────────────────────────────────────────────────────────────┤│ 核心服务层 (Services) │├─────────────────────────────────────────────────────────────────┤│ ┌────────────────┐ ┌────────────────┐ ┌───────────────────┐ ││ │ WASM 提供者 │ │ 国际化 (i18n) │ │ 工具管理器 │ ││ └────────────────┘ └────────────────┘ └───────────────────┘ ││ ┌────────────────┐ ┌────────────────┐ ┌───────────────────┐ ││ │ 快捷键管理 │ │ 配置管理 │ │ 文件处理 │ ││ └────────────────┘ └────────────────┘ └───────────────────┘ │├─────────────────────────────────────────────────────────────────┤│ 技术基础设施层 (Infra) │├─────────────────────────────────────────────────────────────────┤│ ┌──────────────────────────────────────────────────────────┐ ││ │ Vite 构建系统 │ ││ └──────────────────────────────────────────────────────────┘ ││ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ ││ │ TypeScript │ │ Tailwind CSS │ │ Handlebars 模板 │ ││ └──────────────┘ └──────────────┘ └────────────────────────┘ │├─────────────────────────────────────────────────────────────────┤│ WASM 模块层 (WASM) │├─────────────────────────────────────────────────────────────────┤│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ ││ │ PyMuPDF │ │ Ghostscript │ │ CoherentPDF (CPDF) │ ││ └──────────────┘ └──────────────┘ └────────────────────────┘ ││ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ ││ │ Tesseract │ │ LibreOffice │ │ WASM-Vips │ ││ └──────────────┘ └──────────────┘ └────────────────────────┘ │└─────────────────────────────────────────────────────────────────┘目录结构详解
bentopdf/├── .github/ # GitHub 配置│ ├── ISSUE_TEMPLATE/ # 问题模板│ └── workflows/ # CI/CD 工作流 (构建、发布、安全扫描)├── chart/ # Helm Chart (Kubernetes 部署)│ ├── templates/│ └── values.yaml├── cloudflare/ # Cloudflare Workers 配置│ ├── cors-proxy-worker.js # CORS 代理 Worker│ └── wasm-proxy-worker.js # WASM 代理 Worker├── docs/ # VitePress 文档│ ├── .vitepress/│ ├── self-hosting/ # 自托管指南│ └── tools/ # 工具文档├── public/ # 静态资源│ ├── images/ # 图片资源│ ├── locales/ # 多语言翻译文件│ │ ├── en/ # 英语│ │ ├── zh/ # 简体中文│ │ ├── zh-TW/ # 繁体中文│ │ └── ... # 其他语言│ ├── pdfjs-annotation-viewer/ # PDF.js 注释查看器│ ├── pdfjs-viewer/ # PDF.js 查看器│ ├── libreoffice-wasm/ # LibreOffice WASM│ ├── workers/ # Web Workers│ └── config.json # 运行时配置├── scripts/ # 构建和发布脚本│ ├── build.js│ ├── prepare-airgap.sh # 离线部署准备脚本│ ├── generate-i18n-pages.mjs│ ├── generate-sitemap.mjs│ └── ...├── src/│ ├── css/ # 样式文件│ │ ├── styles.css│ │ ├── bookmark.css│ │ └── markdown-editor.css│ ├── js/│ │ ├── compare/ # PDF 比较功能│ │ ├── config/ # 配置文件│ │ │ ├── tools.ts # 工具定义和分类│ │ │ ├── pdf-tools.ts # PDF 工具配置│ │ │ └── ...│ │ ├── const/ # 常量定义│ │ ├── handlers/ # 事件处理器│ │ ├── i18n/ # 国际化│ │ │ ├── index.ts│ │ │ └── i18n.ts│ │ ├── logic/ # 工具逻辑实现 (100+ 工具)│ │ ├── types/ # TypeScript 类型定义│ │ ├── utils/ # 工具函数│ │ │ ├── wasm-provider.ts # WASM 提供者管理│ │ │ ├── wasm-preloader.ts # WASM 预加载│ │ │ ├── pdf-operations.ts # PDF 操作工具│ │ │ ├── tesseract-runtime.ts # Tesseract OCR 运行时│ │ │ └── ...│ │ ├── workflow/ # 工作流引擎│ │ │ ├── nodes/ # 工作流节点定义│ │ │ ├── engine.ts # 工作流执行引擎│ │ │ ├── editor.ts # 工作流编辑器│ │ │ └── ...│ │ ├── main.ts # 主入口文件│ │ └── ui.ts # UI 工具函数│ ├── pages/ # 工具页面 (HTML)│ └── partials/ # Handlebars 模板片段├── docker-compose.yml # Docker Compose 配置├── Dockerfile # 主 Dockerfile├── Dockerfile.nonroot # 非 root 用户 Dockerfile├── vite.config.ts # Vite 配置├── package.json # 项目依赖和脚本└── tsconfig.json # TypeScript 配置核心模块WASM 模块管理系统
BentoPDF 使用多个 WASM 模块来提供高级 PDF 处理功能。 wasm-provider.ts 负责管理这些模块。
classWasmProviderManager {privateconfig: WasmProviderConfig;privatevalidationCache: Map<WasmPackage, boolean>;privatetrustedHosts: Set<string>;// 获取 WASM 模块 URLgetUrl(packageName: WasmPackage): string | undefined;// 设置自定义 WASM URLsetUrl(packageName: WasmPackage, url: string): void;// 验证 WASM 可用性validateUrl(packageName: WasmPackage, url?: string): Promise<{ valid: boolean; error?: string }>;// 检查模块是否配置isConfigured(packageName: WasmPackage): boolean;}支持的 WASM 模块

配置优先级
WASM 配置采用多优先级策略:
- 1.用户配置: 用户在高级设置中配置的 URL(最高优先级)
- 2.环境变量: 构建时通过环境变量配置的 URL
- 3.CDN 默认: 默认的 jsDelivr CDN URL(最低优先级)
安全机制
- 可信主机: 只允许从预定义的可信主机加载 WASM
- URL 验证: 验证 URL 格式和可达性
- 本地存储: 用户配置安全存储在 localStorage
- 内容类型检查: 验证返回的内容类型正确
工作流引擎
工作流引擎允许用户通过可视化界面创建自定义 PDF 处理管道。
工作流执行流程
- 1.拓扑排序 :确保节点按正确的依赖顺序执行
- 2.循环检测 :防止出现无限循环
- 3.顺序执行 :逐个处理节点,支持进度显示
- 4.错误处理 :单个节点失败不会导致整个工作流崩溃
1. 拓扑排序 (Topological Sort) ↓2. 循环检测 (Cycle Detection) ↓3. 节点验证 (Node Validation) ↓4. 顺序执行 (Sequential Execution) ↓5. 进度报告 (Progress Reporting) ↓6. 错误处理 (Error Handling)- 支持的工作流节点
- 输入节点:PDF Input
- 处理节点:Merge、Split、Compress、Encrypt、Decrypt、Rotate、Crop、Watermark 等
- 输出节点:Download
PDF 处理流水线
BentoPDF 实现了高效的 PDF 处理流水线:
处理流程
1.文件加载 ↓2.PDF 解析 (pdf-lib / PDF.js) ↓3.操作执行 (根据工具选择) ├─→ 基础操作 (pdf-lib) ├─→ 高级操作 (PyMuPDF WASM) ├─→ PDF/A 转换 (Ghostscript WASM) └─→ 书签/元数据 (CoherentPDF WASM) ↓4.结果生成 ↓5.文件下载内存管理策略
- 流式处理: 大文件分块处理,避免内存溢出
- 及时释放: 处理完成后立即释放 ArrayBuffer
- Worker 隔离: 复杂计算在 Web Worker 中进行,避免阻塞主线程
- 对象池: 重用常用对象,减少 GC 压力
安装部署
Docker 启动
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest启动之后,通过IP+3000端口 即可访问。如:
本地开发环境部署
# 1. 克隆仓库git clone https://github.com/alam00000/bentopdf.gitcd bentopdf# 2. 安装依赖npm install# 3. 启动开发服务器npm run dev# 4. 打开浏览器访问 http://localhost:5173测试
图片转PDF
优劣势与适用场景
核心优势

劣势与局限性

总结:
BentoPDF 最适合 :
- ✅ 对隐私安全有高要求的用户和组织
- ✅ 需要全面 PDF 工具但不想付费的用户
- ✅ 企业内部需要统一、可定制 PDF 工具平台的场景
- ✅ 有自托管/离线部署需求的环境
- ✅ 教育机构和个人日常使用
BentoPDF 不太适合 :
- ❌ 需要专业级 PDF 深度编辑功能的专业用户
- ❌ 多人实时协作场景
- ❌ 移动端优先使用场景
- ❌ 超大文件(>1GB)批量处理场景
整体而言,BentoPDF 在隐私优先的 PDF 工具领域是一个功能全面且优秀的选择,特别适合企业内部部署和对数据安全有要求的用户使用。
项目链接:https://github.com/alam00000/bentopdf.git
大数据、大模型相关学习资料、大数据项目、湖仓一体、架构师必知必会、数据中台建设方法论...
共有1400多份文档资料,另专为星球成员整理了一份比较详细的语雀知识库合计190万字和飞书文档资料。(内容太多,仅展示部分内容...),欢迎大家踊跃加入星球,您将获得:
一、 提供最全的大数据知识库,不限设备,随时随地打开看的在线文档。
二、免费答疑解惑、交流技术
三、面试指导、模拟面试
四、各类pdf文档下载、星球代码下载
五、提供简历模板,简历修改指导服务,星球成员免费提供简历修改指导。
另外说明加入星球后支持三天无理由退款,不满意无条件随时退。
需要资料请加微信:D1435221412

夜雨聆风