记录一次读取 PDF 目录的经历
读取 PDF
想读取 PDF 的目录,想法大概分为两步:
1.先读取PDF内容
2.把读到的内容转为 xmind
确认好两个大方向后,开始调研,是否有现成的轮子可以使用。
npm 上搜一搜,pdf、pdf reader, etc
果然,名列前茅的是依托 Mozilla 的 pdfjs-dist,点进 github 的 example 看一看。 果然有PDF读取的 demo,参(zhao)考(chao)下,改吧改吧,改成符合自己预期的读取逻辑。
值得一提的是,这个库最方便的是可以指定读取的起止页数。这样也不用考虑用 buffer 一点点读了。赞
把读到内容写入文件中,然后发现,读取的效果并不是百分百完美。
比如:xmind的内容并不需要页数、目录中的 ... 格式,
除此之外,识别的内容也不是百分百完美(果然做的完美都商业化了 -_-||),1 读成 I、l,设置 读成 设直
我就纳了闷了,读错的情况并不是百分百,有的目录也读对了,不知道为啥哪些个出错的是为啥。我也没深入看源码了,就先为了完成功能看了看源码里的 api
所以,读完的文件,除了有规律可循的出错,可以做一波数据清洗,为了保证效果,最后还需要进行一波人工校对的。当然,这个工作,比手工敲一遍目录要轻松很多,成本也可接受了。
PDF 读取就告一段落了。源码我会附录在文章末尾。可以去看源码,很简单,就不再赘述。
===================================================================
生成 xmind
再来一遍,npm 上搜一搜, xmind 官方有提供 SDK for JavaScript,美汁汁儿。去看看 github 中 example 的例子。
一个 xmind 内容生成的步骤:
- new Workbook
- new Topic
- new Zipper
- 通过 TopicInstance 的 on、add 方法把内容挂载在内存中
- 最后用 zipperInstance.save 把 TopicInstance 的内容生成为 xmind 文件
总结:
本次小实验并不具备普适性,只能对具体的目录如:
读取 PDF 内容这个都是一样的。数据清洗、生成最后的目录并不通用。纯满足个人需求了。
可以给 PDF 读取需求的童鞋一点思路。
That's all.
附上源码链接:源码地址
如果可以,动动发财的小手点个 star 也是可以的,thx 😃