You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:28:14