BentoPDF - 隐私优先的浏览器端免费 PDF 工具箱
项目标题与描述BentoPDF是一个强大、以隐私为先、客户端运行的 PDF 工具套件支持自托管。它允许您直接在浏览器中操作、编辑、合并和处理 PDF 文件无需服务器端处理确保您的文件始终保持安全和私密。项目的核心目标是提供一个完全免费、无需注册、无限使用且尊重用户隐私的 PDF 处理解决方案。所有工具都 100% 在浏览器中运行文件永不离开您的设备结合开源AGPL-3.0和商业双重许可模式适合个人和企业使用。功能特性基于对项目代码的分析BentoPDF 提供了极其丰富的功能主要特性包括100 种 PDF 工具涵盖 PDF 处理的全方位需求工具被组织为多个清晰的类别。隐私优先完全本地处理所有处理都在您的浏览器中完成文件不会上传到任何服务器确保了数据的绝对私密性。100% 免费无需注册所有工具均可免费无限次使用无需创建账户或登录。支持离线使用应用可作为渐进式 Web 应用 (PWA) 安装并支持服务端缓存提供离线功能。多语言国际化 (i18n)支持包括英语、中文、德语、法语、西班牙语、越南语等在内的十余种语言并提供完整的翻译和语言切换机制。简洁模式 (Simple Mode)为组织内部部署提供选项可隐藏所有品牌和营销内容只展示核心 PDF 工具提供更清爽的界面。键盘快捷键支持为常用操作提供了全面的键盘快捷键提升操作效率。完善的工具集PDF 转换器支持在 PDF 与 Word、Excel、JPG、PNG、文本、Markdown 等 40 多种格式之间相互转换。PDF 编辑器提供压缩、旋转、裁剪、添加水印、页眉页脚、页码、背景色等 25 种以上编辑功能。PDF 合并与拆分轻松合并多个 PDF 文件或将单个 PDF 拆分为多个文件支持页面提取、删除、重排等。PDF 安全工具提供加密、解密、数字签名、权限管理、移除元数据、线性化等安全功能。灵活部署支持通过 Docker 容器、Docker Compose、静态网站 (Netlify, Vercel, GitHub Pages) 等多种方式轻松自托管。安装指南BentoPDF 提供了多种安装和部署方式以适应不同的使用场景。系统要求现代浏览器支持 WebAssemblyNode.js用于从源码构建Docker用于容器化部署部署方式1. 使用 Docker最简单快捷从 Docker Hub 拉取预构建的镜像并运行# 标准模式包含完整品牌和营销内容dockerrun -p3000:8080 bentopdf/bentopdf:latest# 简洁模式仅显示工具界面适合内网部署dockerrun -p3001:8080 bentopdf/bentopdf-simple:latest访问http://localhost:3000或http://localhost:3001即可使用。2. 使用 Docker Compose创建docker-compose.yml文件version:3.8services:bentopdf:image:bentopdf/bentopdf:latest# 或 bentopdf/bentopdf-simple:latestcontainer_name:bentopdfrestart:unless-stoppedports:-8080:8080security_opt:-no-new-privileges:true然后运行docker-compose up -d。3. 作为静态网站部署BentoPDF 可以部署在任何静态网站托管服务上Netlify手动上传发布包或连接 GitHub 仓库自动部署。Vercel导入 Git 仓库并选择 Vite 框架预设。GitHub Pages通过 GitHub Actions 工作流自动构建和部署。项目每个版本都提供预构建的dist-{version}.zip文件下载解压后即可上传至静态主机。4. 从源码构建和运行用于开发# 克隆仓库gitclone https://github.com/alam00000/bentopdf.gitcdbentopdf# 安装依赖npminstall# 开发模式运行标准模式npmrun dev# 开发模式运行简洁模式npmrun serve:simple# 构建生产版本npmrun build使用说明基础使用访问您部署的 BentoPDF 实例。在主页面您可以看到按类别组织的所有工具。您可以直接点击工具卡片或使用顶部的搜索框快速查找工具。选择工具后按照界面提示上传文件、配置选项然后开始处理。处理完成后结果文件将直接在浏览器中下载。语言切换BentoPDF 支持多语言。页脚区域内置了语言切换器点击后可以从下拉列表中选择您偏好的语言。语言设置会保存在本地。键盘快捷键BentoPDF 提供了便捷的键盘快捷键以提升效率Escape返回工具网格视图。Ctrl/Cmd K聚焦工具搜索框。Ctrl/Cmd /显示/隐藏快捷键帮助面板。在特定工具界面如编辑器中还支持方向键翻页等更多快捷键。API 概览BentoPDF 是一个前端应用没有传统后端 API。其核心功能通过集成多个 WebAssembly 库如 pdf.js, pymupdf-wasm, gs-wasm在浏览器中实现。对于数字签名等需要网络请求的功能项目提供了一个可选的 Cloudflare Worker 代理 (cors-proxy-worker.js) 来处理跨域请求。项目的构建和配置基于 Vite并使用了多个插件tailwindcss/vite: 用于 Tailwind CSS。vite-plugin-handlebars: 用于 HTML 模板和局部组件如导航栏、页脚。vite-plugin-static-copy: 用于复制静态资源。自定义的languageRouterPlugin: 用于开发环境下的多语言路由重写。核心代码以下是项目中一些核心模块的代码示例展示了其关键实现。1. 应用状态管理 (src/js/state.js)此模块集中管理了应用的核心状态确保在不同工具间切换时状态清晰。// src/js/state.jsexportconststate{activeTool:null,// 当前激活的工具IDfiles:[],// 用户上传的文件列表pdfDoc:null,// 当前加载的PDF.js文档对象pdfPages:[],// 文档的页面代理对象数组currentPdfUrl:null,// 当前PDF文件的Blob URL};// 重置状态通常在切换工具或完成操作时调用exportfunctionresetState(){state.activeToolnull;state.files[];state.pdfDocnull;state.pdfPages[];state.currentPdfUrlnull;document.getElementById(tool-content).innerHTML;}2. 国际化 (i18n) 语言检测 (src/js/i18n/i18n.js)此函数根据URL路径或本地存储来确定当前应使用的语言。// src/js/i18n/i18n.js (节选)exportconstgetLanguageFromUrl(){constbasePathimport.meta.env.BASE_URL.replace(/\/$/,);letpathwindow.location.pathname;// 处理基础路径如部署在子目录时if(basePathbasePath!/path.startsWith(basePath)){pathpath.slice(basePath.length)||/;}// 从URL路径匹配语言代码constlangMatchpath.match(/^\/(en|fr|es|de|zh|zh-TW|vi|tr|id|it|pt)(?:\/|$)/);if(langMatchsupportedLanguages.includes(langMatch[1])){returnlangMatch[1];}// 回退到本地存储的语言设置conststoredLanglocalStorage.getItem(i18nextLng);if(storedLangsupportedLanguages.includes(storedLang)){returnstoredLang;}// 默认返回英语returnen;};3. Vite 配置中的语言路由中间件 (vite.config.ts)在开发服务器中此中间件负责将类似/de/tools的请求重写为/tools.html并注入语言上下文实现无刷新语言切换。// vite.config.ts (节选)functioncreateLanguageMiddleware(isDev:boolean){return(req,res,next){constbasePathgetBasePath();letpathnamereq.url.split(?)[0];// 剥离基础路径if(basePathbasePath!/pathname.startsWith(basePath)){pathnamepathname.slice(basePath.length)||/;}constlangMatchpathname.match(LANG_REGEX);if(langMatch){const[,lang,rest]langMatch;// 重写请求到对应的 .html 文件req.url${basePath}/${rest||index}.html;// 将语言信息附加到请求对象供后续插件使用(reqasany).languagelang;}elseif(PAGES.has(pathname.slice(1).replace(/\.html$/,))){// 处理无语言前缀的页面请求附加默认语言(reqasany).languageen;}next();};}4. 服务端脚本 - 版本发布 (scripts/release.js)此脚本自动化了项目的版本发布流程包括更新版本号、创建 Git 标签、构建和打包。#!/usr/bin/env node// scripts/release.js (节选)functionmain(){consttypeprocess.argv[2]||patch;// 接受 major, minor, patch 参数console.log( Releasing${type}version...);// 1. 更新 package.json 中的版本号constnewVersionupdateVersion(type);// 2. 更新 HTML 文件中的版本号显示execSync(npm run update-version,{stdio:inherit});// 3. 提交版本变更execSync(git add package.json *.html src/pages/*.html,{stdio:inherit});execSync(git commit -m Release v${newVersion},{stdio:inherit});// 4. 创建 Git 标签consttagNamecreateGitTag(newVersion);// 5. 构建并打包发行文件execSync(npm run package,{stdio:inherit});// 这会生成 dist-{version}.zip// 6. 推送代码和标签到远程仓库execSync(git push origin main,{stdio:inherit});execSync(git push origin${tagName},{stdio:inherit});console.log( Release v${newVersion}complete!);console.log( Docker image: bentopdf/bentopdf:${newVersion});console.log( Distribution: dist-${newVersion}.zip);}gqq1IFjQTrOralpsd4SvLFV2TeMkbWkR3xz9WAatxU0更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享

相关新闻

【高精度气象】极端天气,新能源时代最昂贵的账单:你的风控,离真实的P99风险有多远?

【高精度气象】极端天气,新能源时代最昂贵的账单:你的风控,离真实的P99风险有多远?

2025年的一场区域性暴雪,让华北某大型光伏基地功率预测连续失准42小时。账面显示月度准确率达标,但仅偏差考核一项的直接经济损失就超过600万元——这还不包括因现货市场误判带来的机会成本。这绝非危言耸听。在全球变暖背景下,气象极端化趋势…

2026/7/7 6:11:38 阅读更多 →
风电光伏功率预测服务协议:指标模糊就是陷阱!延迟、缺测、回补、降级四大红线全解析

风电光伏功率预测服务协议:指标模糊就是陷阱!延迟、缺测、回补、降级四大红线全解析

当电网调度中心要求99%的预测准确率时,供应商承诺了98%。这1%的差距背后,藏着的是每年数百万的考核罚款和千万级的现货交易损失。预测服务的价值,正在从承诺的数字转向执行的细节。 随着2026年风电、光伏在电力系统中占比突破临界点&#xff…

2026/7/8 6:48:06 阅读更多 →
价值百万的案例:某车企Abaqus许可优化年度节省报告

价值百万的案例:某车企Abaqus许可优化年度节省报告

价值百万的案例:某车企Abaqus许可优化年度节省报告作为一名在汽车工业领域深耕多年的结构工程技术人员,我经常会遇到关于软件授权优化的问题。很多车企在进行仿真设计时,都会采用Abaqus这样的高端有限元分析工具,而其授权费用往往…

2026/7/7 0:37:24 阅读更多 →

最新新闻

PointNetVLAD 实战:在 Oxford RobotCar 数据集上实现 95% 召回率的位置检索

PointNetVLAD 实战:在 Oxford RobotCar 数据集上实现 95% 召回率的位置检索

PointNetVLAD实战:在Oxford RobotCar数据集上实现95%召回率的位置检索当自动驾驶车辆穿梭于城市街道时,如何仅凭激光雷达点云就能精准识别当前位置?传统基于图像的位置识别方法在光照变化剧烈的场景中往往表现不佳,而PointNetVLAD…

2026/7/8 23:10:40 阅读更多 →
Scala 2.13/3 排序实战:sortWith、sortBy、sorted 3种方法性能与适用场景对比

Scala 2.13/3 排序实战:sortWith、sortBy、sorted 3种方法性能与适用场景对比

Scala 2.13/3 排序实战:sortWith、sortBy、sorted 3种方法性能与适用场景对比在数据处理和业务逻辑实现中,排序操作几乎无处不在。Scala集合库提供了三种主要的排序方法:sortWith、sortBy和sorted,它们各有特点,适用于…

2026/7/8 23:08:39 阅读更多 →
3 种中文年报可读性指标对比:传统公式 vs Word2Vec 模型 vs 深度学习模型

3 种中文年报可读性指标对比:传统公式 vs Word2Vec 模型 vs 深度学习模型

中文年报可读性评估:三大技术路径深度评测与选型指南 金融文本的可读性评估一直是学术界和业界的关注焦点。作为企业信息披露的核心载体,年报的可读性直接影响投资者决策效率与市场信息透明度。传统方法如Flesch-Kincaid公式在英文世界广泛应用&#xff…

2026/7/8 23:08:39 阅读更多 →
U-Net 跳跃连接深度解析:Concat 与 Add 融合方式对比及 3 种实现变体

U-Net 跳跃连接深度解析:Concat 与 Add 融合方式对比及 3 种实现变体

U-Net 跳跃连接深度解析:Concat 与 Add 融合方式对比及 3 种实现变体在医学影像分割领域,U-Net 凭借其独特的对称编码器-解码器结构和跳跃连接机制,已成为众多分割任务的基准模型。本文将深入探讨 U-Net 最核心的 Skip Connection 机制&#…

2026/7/8 23:08:39 阅读更多 →
Adam vs SGD vs RMSProp:5 个深度学习任务下的收敛速度与泛化能力评测

Adam vs SGD vs RMSProp:5 个深度学习任务下的收敛速度与泛化能力评测

Adam vs SGD vs RMSProp:5 个深度学习任务下的收敛速度与泛化能力评测 在深度学习模型的训练过程中,优化算法的选择往往决定了模型能否快速收敛并获得良好的泛化性能。Adam、SGD with Momentum和RMSProp作为三种主流优化器,各自有着独特的设计…

2026/7/8 23:02:36 阅读更多 →
Windows 11 部署 TensorFlow GPU:WSL2 对比原生安装的 3 大优势与实测

Windows 11 部署 TensorFlow GPU:WSL2 对比原生安装的 3 大优势与实测

Windows 11 部署 TensorFlow GPU:WSL2 的三大优势与实战指南1. 为什么WSL2成为Windows平台TensorFlow GPU的首选方案去年TensorFlow官方宣布停止对原生Windows的GPU支持后,整个开发者社区都在寻找可靠的替代方案。作为长期在Windows平台进行机器学习开发…

2026/7/8 23:02:36 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻