选型

  • ledongthuc/pdf go语言实现的 pdf 解析库。有不少的 star 和 fork,并且从 demo 上看到确实能读取到内容。
  • apache/tika Java 实现的 pdf 解析库。之所以能进入决赛圈是因为网上大量人推荐并且是 apache的项目,所以我也比较放心使用。

但是,本人亲测读取一些非标准的pdf。ledongthuc/pdf会提示报错:

malformed PDF: reading at offset 0: stream not present

所以,还是决定使用:apache/tika !!!!

构造环境

tika需要配合特定的环境才能读取pdf。用docker即可快速构造环境

docker run -d -p 9998:9998 apache/tika:latest

代码:

package pdf

import (
	"context"
	"fmt"
	"io/ioutil"
	"log"
	"os"

	"github.com/google/go-tika/tika"
)

func ChangePdf() {
	// var filePath string
	// flag.StringVar(&filePath, "fp", "", "pdf file path.")
	// flag.Parse()
	// if filePath == "" {
	// 	panic("file path must be provided")
	// }
	filePath := "../oemlist.pdf"
	content, err := ReadPdf(filePath) // Read local pdf file
	if err != nil {
		panic(err)
	}
	fmt.Println(content)

	//将pdf的所有内容写入oem.html文件。(发现这个办法写文件很简单)
	err = ioutil.WriteFile("./oem.html", []byte(content), 0777)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("保存成功")
}

func ReadPdf(path string) (string, error) {
	f, err := os.Open(path)
	defer f.Close()
	if err != nil {
		return "", err
	}
	//这个服务需要用docker生成:docker run -d -p 9998:9998 apache/tika:latest
	client := tika.NewClient(nil, "http://127.0.0.1:9998")
	return client.Parse(context.TODO(), f)
}

参考文章:
https://mp.weixin.qq.com/s/jkUOZkLQR6HW0h9s_G-6Gw

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐