记录一次读取 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 内容生成的步骤:

  1. new Workbook
  2. new Topic
  3. new Zipper
  4. 通过 TopicInstance 的 on、add 方法把内容挂载在内存中
  5. 最后用 zipperInstance.save 把 TopicInstance 的内容生成为 xmind 文件

总结:

本次小实验并不具备普适性,只能对具体的目录如:


读取 PDF 内容这个都是一样的。数据清洗、生成最后的目录并不通用。纯满足个人需求了。

可以给 PDF 读取需求的童鞋一点思路。

That's all.

附上源码链接:源码地址

如果可以,动动发财的小手点个 star 也是可以的,thx 😃

posted @ 2021-12-21 15:20  xyJen  阅读(424)  评论(0编辑  收藏  举报