美文网首页Golang语言知识库
知识分享之Golang——读取pdf中纯文本内容

知识分享之Golang——读取pdf中纯文本内容

作者: cn華少 | 来源:发表于2022-01-04 22:10 被阅读0次

    知识分享之Golang——读取pdf中纯文本内容

    背景

    知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。

    知识分享系列目前包含Java、Golang、Linux、Docker等等。

    开发环境

    内容

    日常我们有时需要进行对pdf文件进行读取其中的内容,我对比了各类现有的开源组件库,发现ledongthuc/pdf组件比较好用,现分享给大家。

    1、安装

    go get -u github.com/ledongthuc/pdf
    go mod vendor
    

    2、工具类

    import (
        "bytes"
        "github.com/ledongthuc/pdf"
    )
    
    // ReadPdf 获取pdf文字内容
    func ReadPdf(path string) (string, error) {
        f, r, err := pdf.Open(path)
        // remember close file
        defer f.Close()
        if err != nil {
            return "", err
        }
        var buf bytes.Buffer
        b, err := r.GetPlainText()
        if err != nil {
            return "", err
        }
        buf.ReadFrom(b)
        return buf.String(), nil
    }
    
    阅读按行分组的文本
    func ReadPdfGroup(path string) (string, error) {
        f, r, err := pdf.Open(path)
        defer func() {
            _ = f.Close()
        }()
        if err != nil {
            return "", err
        }
        totalPage := r.NumPage()
    
        for pageIndex := 1; pageIndex <= totalPage; pageIndex++ {
            p := r.Page(pageIndex)
            if p.V.IsNull() {
                continue
            }
    
            rows, _ := p.GetTextByRow()
            for _, row := range rows {
                println(">>>> row: ", row.Position)
                for _, word := range row.Content {
                    fmt.Println(word.S)
                }
            }
        }
        return "", nil
    }
    // PDF格式的所有文本
    func readPdfFormatAll(path string) (string, error) {
        f, r, err := pdf.Open(path)
        // remember close file
        defer f.Close()
        if err != nil {
            return "", err
        }
        totalPage := r.NumPage()
    
        for pageIndex := 1; pageIndex <= totalPage; pageIndex++ {
            p := r.Page(pageIndex)
            if p.V.IsNull() {
                continue
            }
            var lastTextStyle pdf.Text
            texts := p.Content().Text
            for _, text := range texts {
                if isSameSentence(text, lastTextStyle) {
                    lastTextStyle.S = lastTextStyle.S + text.S
                } else {
                    fmt.Printf("Font: %s, Font-size: %f, x: %f, y: %f, content: %s \n", lastTextStyle.Font, lastTextStyle.FontSize, lastTextStyle.X, lastTextStyle.Y, lastTextStyle.S)
                    lastTextStyle = text
                }
            }
        }
        return "", nil
    }
    
    本文声明:
    88x31.png
    知识共享许可协议
    本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

    相关文章

      网友评论

        本文标题:知识分享之Golang——读取pdf中纯文本内容

        本文链接:https://www.haomeiwen.com/subject/mqwqcrtx.html