stephenturner/pdfdown
GitHub: stephenturner/pdfdown
一款纯客户端运行的 PDF 转 Markdown 静态网页工具,无需上传文件即可在浏览器本地完成转换。
Stars: 2 | Forks: 0
# pdfdown
将 PDF 拖入页面,即可获取 Markdown。所有操作均在浏览器本地运行,无需上传,无需服务器。
**立即体验:** https://stephenturner.github.io/pdfdown/
## 功能特性
- 支持拖拽、点击选择或粘贴 PDF
- 或者粘贴一个 PDF 的 URL(托管该 PDF 的服务器必须允许跨域请求)
- 可分享的链接:通过 URL 进行转换时,地址栏会显示 `#url=`,打开带有此片段的链接会自动转换 PDF
- 分屏视图:左侧为可编辑的 Markdown 源码,右侧为实时渲染的预览
- 复制 Markdown 或下载为 `.md` 文件
- 复制富文本(可带格式粘贴到 Word、Google Docs 和电子邮件中)或下载独立的 `.html` 文件
- 完全客户端运行:您的 PDF 绝不会离开您的本地设备
## 本地运行
这是一个静态网站。请通过 HTTP 提供该文件夹服务(module scripts 无法通过 `file://` 加载):
```
python3 -m http.server 8000
# 然后访问 http://localhost:8000
```
## 在 GitHub Pages 上托管
该仓库可直接在 Pages 上运行:所有内容均为静态,且所有路径均为相对路径,因此即使从 `/pdfdown/` 这样的项目子路径中也能正常运行。`.nojekyll` 文件会跳过 Jekyll 构建步骤,确保文件按提交时的原样提供服务。在仓库设置中,启用 `main` 分支根目录的 Pages。
## 工作原理
转换工作由 [@opendocsg/pdf2md](https://github.com/opengovsg/pdf2md) 完成,该工具使用 Mozilla 的 pdf.js(通过 unpdf)来提取文本,并根据字体大小和布局推断结构(标题、列表、代码块)。预览使用 [marked](https://github.com/markedjs/marked) 进行渲染,并使用 [DOMPurify](https://github.com/cure53/DOMPurify) 进行清理。两者均通过 esbuild 打包并捆绑在浏览器的 `vendor/` 目录中:
```
npm install
npm run build
```
这些打包文件已提交至仓库,因此仅在重新构建它们时才需要运行 `npm install`。
## 限制
扫描件或纯图像 PDF 没有文本层,会生成空的输出(发生这种情况时,页面会发出警告)。要处理此类文件需要使用 OCR,例如以 Tesseract.js 作为后备方案。
## 许可证
MIT。详情请参阅 [LICENSE](LICENSE)。
标签:pdf.js, PDF转Markdown, 前端工具, 后端开发, 多模态安全, 数据可视化, 文档转换, 纯前端, 静态站点