MinerUPress:把 PDF 教材一键变成网站

Blog #Project#PDF
阅读时长 Reading time: 7 min read

最近做了一个小东西,完全是自己用着不爽才动手写的:MinerUPress

GitHub:https://github.com/aronnaxlin/minerupress

能干嘛?

说起来很简单——把一本被 MinerU 处理过的 PDF 书,自动整理成一个能看的 MkDocs Material 网站

为什么做这个?

如果你上过国外的计算机公开课——CS50P、CS61B、MIT 6.006 之类——你会发现一个共同点:它们的课程材料几乎都是网页。 点开就是干净的排版,左侧有导航目录,代码块有语法高亮,搜索框能直接定位知识点。手机也能看,复制代码也方便,分享给别人直接丢一个链接就行。

国内的 CS 自学社区也在往这个方向走。比如 CSDIY,把全世界最好的 CS 公开课整理成了一个漂亮的在线文档站,读起来像一本精心编排的书,而不是一堆零散的 PDF。

说实话,这种体验是会让人上瘾的。用惯之后,再回去面对 PDF,就会觉得很难受。

然后某天我突然意识到:我在本科阶段用的那些教材,在阅读体验上,和这些公开课材料之间,隔了一整个时代。 同样是几百页的内容,同样是章节分明、有代码有图的结构——国外的公开课已经把它们变成了能搜、能跳、能手机看的网站,而我们自己的教材还躺在 PDF 里。不是因为内容不行,就是没人做那一步。

但真正动手之后才发现,卡住的并不只是意愿,还有流程。

现在很多教材虽然有电子版,但体验基本停留在 PDF 时代。尤其是扫描版,打开慢、翻页累,文字不好复制,章节之间跳来跳去很不方便,代码块排版惨不忍睹,图片和文字的关系糊成一团,想分享给别人最后往往还是只能丢一个 PDF 过去。

MinerU 其实已经把最难的那一步做得很好了——把扫描的图片 PDF 还原成带标题层级、文字和图片引用的 Markdown 或 JSON。但当你面对一本几百页的书,解析完之后的事情才真正开始:要拆章节、要判断目录页和正文页的边界、要整理图片路径、要修代码块、要生成 MkDocs 配置、要构建、要部署……每一件单独看都不难,串在一起就非常消磨人。

所以就有了这个项目。不是重新发明什么,就是把那条从 PDF 到网站的路走通。 让我自己用的教材,也能以 CSDIY、CS50P 那种形式出现。

说”不甘心”可能有点重,但大概就是这个意思。

Demo

为了验证本项目,已经在 CloudFlare Pages 上成功部署了两本教材的内容,尚硅谷 JavaWeb 和谢希仁老师的经典计算机网络教材,由于书籍版权原因暂不可公开,只能放一张截图,后续会找一本已在公共领域范围内的书籍做 Demo 发布。

MinerU Pipeline Demo

这个流程也需要 AI Native

这个项目本身就是几乎全部 Vibe Coding 出来的。既然如此,别家的 Hermes、Codex、Claude Code 也应该能轻松接手。所以项目里已经附带了一个 Skill,只需让 Agent 装上这个 Skill,再发给 TA 一本 PDF 链接,跟着指引走完 MinerU API / Cloudflare API 的填写,就可以直接上线了。

适合什么内容?

比较适合这些场景:教材、课程讲义、培训资料数字化;技术书、课程资料整理成在线文档;公司内部 PDF 手册转知识库;公开资料转成能浏览的网站;个人学习资料整理成长期维护的阅读站点。

当然不是万能的。PDF 质量、MinerU 解析效果、原书排版复杂度都会影响最终结果。特别是扫描质量差、版式复杂、公式很多的书,还是得靠人检查修正。但至少,最重复、最机械、最容易让人放弃的那部分,可以先交给它。

感谢

这个项目能跑起来,完全是因为站在几个特别好的开源项目肩膀上。

MinerU 做完了最难的那一步:把图片 PDF 重新变成可读的文档结构。没有它,后面的一切都无从谈起。MkDocsMaterial for MkDocs 提供了我见过最舒服的文档框架和主题,让一本教材看起来真的像一本书。Cloudflare Pages 让部署简单到几乎没有存在感。还有 Vercel 的 Agent Skills 发布框架,给了我一个很好的参考:怎么让一个工具不是只给人用,也能被别的 AI agent 配接。

这些项目每一个单拿出来都很优秀,我只是把它们串在一起,补上了中间那一段。

真诚感谢。

最后

这个事情的原因真的很简单:我不想每次想把一本 PDF 变成网页站点的时候,都重新写一堆临时脚本,再加上 Vibe Coding 在今时今日实在是过于方便,所以才有了这个项目。

GitHub: https://github.com/aronnaxlin/minerupress

最后修改 Last modified: 2026年5月23日 23 May 2026