/*
1、程序的作用是识别图片内的文字。
2、以图片文字重命名文件。
3、并把图片重新输出为pdf文件。
*/
package main
import (
"fmt"
"log"
"os"
"path"
"path/filepath"
"regexp"
"slices"
"strings"
"github.com/doraemonkeys/paddleocr"
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/sqweek/dialog"
)
// 解析图片
func ParseOcrImage(imagePath string) (Data []paddleocr.Data) {
// 创建PaddleOCR实例
p, err := paddleocr.NewPpocr(`paddle\PaddleOCR-json.exe`,
paddleocr.OcrArgs{})
if err != nil {
panic(err)
}
defer p.Close()
result, err := p.OcrFileAndParse(imagePath)
if err != nil {
panic(err)
}
if result.Code != paddleocr.CodeSuccess {
fmt.Println("orc failed:", result.Msg)
return
}
// 处理结果
return result.Data
}
func SearchString(str string) (companyName string) {
reg := regexp.MustCompile(`收货单位:(.*)|购货单位:(.*)`)
companyName = reg.FindString(str)
return companyName
}
func NewFile(OldName, newName string, i int64) {
newName = strings.ReplaceAll(strings.Split(newName, ":")[1], " ", "")
if newName != "" {
newName = fmt.Sprintf("%s\\%s%d.jpg", filepath.Dir(OldName), newName, i)
err := os.Rename(OldName, newName)
if err != nil {
fmt.Println(err)
}
}
// newName = filepath.Dir(OldName) + `\` + strings.Split(newName, ":")[1] + strconv.FormatInt(i, 10) + ".jpg"
}
func Rename(filePathName string, rightNum int64) bool {
data := ParseOcrImage(filePathName)
for _, v := range data {
companyName := SearchString(v.Text)
if companyName != "" {
NewFile(filePathName, companyName, rightNum)
return true
}
}
return false
}
func imageToPdf() {
var images = []string{}
dirEntry, err := os.ReadDir("./")
if err != nil {
log.Println(err)
return
}
for _, entry := range dirEntry {
if path.Ext(entry.Name()) == ".png" || path.Ext(entry.Name()) == ".jpg" || path.Ext(entry.Name()) == ".jpeg" || path.Ext(entry.Name()) == ".gif" {
images = append(images, entry.Name())
}
}
slices.Sort(images)
api.ImportImagesFile(images, "output.pdf", nil, nil)
dialog.Message("提示:%s", "PDF转换完成").Title("提示").Info()
}
func main() {
/*
1、遍历目录更改文件名称
2、针对文件名称进行分类
3、把文件进行转存成pdf文件
*/
dirEntry, err := os.ReadDir("./")
if err != nil {
log.Println(err)
return
}
var n int64 = 1
for _, entry := range dirEntry {
if path.Ext(entry.Name()) == ".png" || path.Ext(entry.Name()) == ".jpg" || path.Ext(entry.Name()) == ".jpeg" || path.Ext(entry.Name()) == ".gif" {
absName, err := filepath.Abs(entry.Name())
if err != nil {
log.Println(err)
return
}
Rename(absName, n)
n++
}
}
imageToPdf()
}