如何无需安装poppler-utils,将pdftotext嵌入Go二进制文件?
无需依赖poppler-utils的Go PDF文本提取方案
你当前的代码通过调用系统pdftotext命令实现PDF文本提取,但该命令属于poppler-utils包,导致程序必须在已安装该包的环境才能运行。要摆脱这个依赖,直接使用Go原生PDF处理库即可。
推荐使用ledongthuc/pdf库
这个库支持保留PDF原布局的文本提取,和你用pdftotext -layout的效果一致,且无需任何外部依赖。
安装库
go get github.com/ledongthuc/pdf
替换代码
把你的代码换成下面的实现:
package main import ( "fmt" "os" "github.com/ledongthuc/pdf" ) func main() { pdfPath := "/Volumes/T7Touch/Learn/e-statement-to-t-account/5725299769Jul2022.pdf" file, err := os.Open(pdfPath) if err != nil { panic(err) } defer file.Close() reader, err := pdf.NewReader(file, int64(file.Size())) if err != nil { panic(err) } var fullText string for pageNum := 1; pageNum <= reader.NumPage(); pageNum++ { page, err := reader.Page(pageNum) if err != nil { panic(err) } // 提取带布局的文本,对应pdftotext的-layout参数 pageText, err := page.ExtractText() if err != nil { panic(err) } fullText += pageText } fmt.Println(fullText) }
其他备选库
- unipdf:功能更丰富,支持PDF编辑、加密等操作,但免费版本有使用限制,商用需付费授权。
- pdfreader:轻量级解析库,适合只需要简单文本提取的场景。
方案优势
- 编译后的二进制文件可独立运行,无需用户安装
poppler-utils或其他工具。 - 跨平台兼容性好,在Linux、Mac等系统上都能直接使用,不需要额外配置。
内容的提问来源于stack exchange,提问作者Jason Rich Darmawan
相关产品推荐
相关产品推荐

