选型
- 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