一个运行在浏览器中的 PDF 论文阅读器,支持划词翻译、流式输出、图表解读、多模型配置和用量统计。
PDF 文件在浏览器中由 pdf.js 解析,不会上传到 Paper Reader 服务端。阅读记录、译文和模型配置默认保存在当前浏览器中。
- 本地打开 PDF,支持大文件懒加载和阅读进度保存
- 自动或手动划词翻译,支持上下文提取和流式输出
- 支持 OpenAI 兼容接口和 Anthropic 接口
- 支持多个模型配置、独立图片解读模型和 Prompt 模板
- 支持图表自动识别与手动框选解读
- 保存译文、生词和调用用量统计
- 数据导入、导出和浏览器持久化存储
- Docker Engine
- Docker Compose v2,能够使用
docker compose命令
从项目源码构建并启动:
docker compose up -d --build默认访问地址:
http://localhost:8080
检查容器和健康状态:
docker compose ps
curl http://localhost:8080/healthz健康检查正常时会返回 ok。
通过 PAPER_READER_PORT 修改宿主机端口:
PAPER_READER_PORT=3000 docker compose up -d --build此时访问 http://localhost:3000。
docker compose logs -f # 查看实时日志
docker compose restart # 重启容器
docker compose up -d --build # 修改代码后重新构建
docker compose down # 停止并删除容器Docker 使用 Node.js 多阶段构建前端,最终由 Nginx 提供静态文件。宿主机不需要安装 Node.js,也不需要提前生成 node_modules 或 dist。
| 内容 | 存储位置 |
|---|---|
| PDF 文件、译文、阅读进度、用量明细 | IndexedDB |
| 模型配置、API Key、生词和界面设置 | localStorage |
- Docker 容器不保存用户 PDF、阅读记录或 API Key,因此不需要挂载数据卷。
- 清理浏览器站点数据会删除本地记录,可以在设置中定期导出备份。
- API Key 由浏览器直接发送给所配置的模型服务,不会写入 Docker 镜像或项目仓库。
- 如果公开部署并希望所有用户共用同一个服务端 API Key,必须增加后端代理,并把密钥保存在服务端环境变量中。
- 公网部署建议在容器前配置 HTTPS 反向代理。
.
├── Dockerfile
├── docker-compose.yml
├── docker/nginx.conf Nginx 静态站点与健康检查
├── src/
│ ├── components/ 阅读器、设置、翻译和统计组件
│ ├── hooks/ 划词选择逻辑
│ ├── lib/ 存储、模型接口、文本和图片处理
│ ├── App.jsx 应用状态与页面编排
│ └── main.jsx React 入口
├── index.html
├── package.json
└── vite.config.js