在 Go 语言中解析 PDF 文件时,很多开发者早期可能会考虑使用 github.com/dslipak/pdf,但该库在处理大文件或复杂 PDF 时存在较为明显的性能问题(如内存占用过高、解析速度慢)。
因此,**建议使用 github.com/ledongthuc/pdf**。它是更为优秀的衍生版本,针对一些性能瓶颈和功能做了优化改进,解析更加稳定和高效。
下面是一个使用 github.com/ledongthuc/pdf 读取并提取 PDF 中纯文本的完整示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| package main
import ( "fmt" "log" "os"
"github.com/ledongthuc/pdf" )
func main() { f, err := os.Open("example.pdf") if err != nil { log.Fatalf("无法打开文件: %v", err) } defer f.Close()
finfo, err := f.Stat() if err != nil { log.Fatalf("无法获取文件状态: %v", err) }
reader, err := pdf.NewReader(f, finfo.Size()) if err != nil { log.Fatalf("无法创建 PDF Reader: %v", err) }
numPages := reader.NumPage() fmt.Printf("PDF 总页数: %d\n", numPages)
for i := 1; i <= numPages; i++ { page := reader.Page(i) if page.V.IsNull() { continue } text, err := page.GetPlainText(nil) if err != nil { log.Printf("第 %d 页提取文本失败: %v", i, err) continue }
fmt.Printf("--- 第 %d 页内容 ---\n", i) fmt.Println(text) } }
|