前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >知识分享之Golang——读取pdf中纯文本内容

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

作者头像
cn華少
发布2022-01-07 14:06:56
1.7K0
发布2022-01-07 14:06:56
举报
文章被收录于专栏:IT综合技术分享IT综合技术分享

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

背景

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

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

开发环境

内容

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

1、安装

代码语言:javascript
复制
go get -u github.com/ledongthuc/pdf
go mod vendor

2、工具类

代码语言:javascript
复制
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
}
本文声明:

知识共享许可协议

本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022.01.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识分享之Golang——读取pdf中纯文本内容
    • 背景
      • 开发环境
        • 内容
          • 1、安装
          • 2、工具类
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档