go读取pdf

选型

  • 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值