如何使用Golang提取PDF文本?代码输出乱码问题求助
解决Golang提取PDF文本乱码问题
你代码里的问题出在调用page.GetAllContentStreams()方法——这个方法返回的是PDF页面的底层内容流,包含的是PDF内部的绘图指令、编码后的原始数据,不是实际可读的文本,所以输出会是类似乱码的内容。
要正确提取PDF文本,应该使用unipdf库提供的TextExtractor工具。以下是修正后的代码:
package main import ( "bufio" "bytes" "fmt" "io/ioutil" "log" "net/http" "os" "strings" pdf "github.com/unidoc/unipdf/v3/model" "github.com/unidoc/unipdf/v3/extractor" ) func main() { fmt.Println("Enter URL of PDF file:") reader := bufio.NewReader(os.Stdin) url, err := reader.ReadString('\n') if err != nil { log.Fatal(err) } url = strings.TrimSpace(url) // Fetch PDF from URL. resp, err := http.Get(url) if err != nil { log.Fatal(err) } defer resp.Body.Close() buf, _ := ioutil.ReadAll(resp.Body) pdfReader, err := pdf.NewPdfReader(bytes.NewReader(buf)) if err != nil { log.Fatal(err) } // Parse PDF file. isEncrypted, err := pdfReader.IsEncrypted() if err != nil { log.Fatal(err) } // If PDF is encrypted, exit with message. if isEncrypted { fmt.Println("Error: PDF is encrypted.") os.Exit(1) } // Get number of pages. numPages, err := pdfReader.GetNumPages() if err != nil { log.Fatal(err) } // Iterate through pages and extract text. for i := 1; i <= numPages; i++ { page, err := pdfReader.GetPage(i) if err != nil { log.Fatal(err) } // 创建文本提取器 textExtractor, err := extractor.New(page) if err != nil { log.Fatal(err) } // 提取页面文本 text, err := textExtractor.ExtractText() if err != nil { log.Fatal(err) } fmt.Printf("Page %d Text:\n%s\n", i, text) } }
关键修改说明
- 新增导入
github.com/unidoc/unipdf/v3/extractor包,这是unipdf专门用于文本提取的模块 - 替换原有的
page.GetAllContentStreams()为extractor.New(page)创建提取器,再调用ExtractText()方法获取可读文本
这样就能正确提取出PDF里的可读内容,不会出现乱码问题。
内容的提问来源于stack exchange,提问作者simplfuzz
相关产品推荐
相关产品推荐

