Files
ragflow/internal/parser/parser/pdf_parser_plaintext_nocgo.go
qinling0210 d549194562 Implement builtin chunk method as ingestion pipeline in GO (#16822)
### Summary

Implement builtin chunk mehtod as ingestion pipeline in GO
2026-07-13 13:51:40 +08:00

43 lines
1012 B
Go

//go:build !cgo
package parser
import (
"bytes"
"fmt"
"strings"
"github.com/ledongthuc/pdf"
)
func parsePDFWithPlainText(filename string, data []byte, parser *PDFParser) ParseResult {
if len(data) == 0 {
return emptyPDFResult(filename)
}
reader := bytes.NewReader(data)
pdfReader, err := pdf.NewReader(reader, int64(len(data)))
if err != nil {
return ParseResult{Err: fmt.Errorf("parser: plain_text open: %w", err)}
}
pageCount := pdfReader.NumPage()
items := make([]map[string]any, 0, pageCount)
for pageNum := 1; pageNum <= pageCount; pageNum++ {
p := pdfReader.Page(pageNum)
if p.V.IsNull() {
continue
}
text, err := p.GetPlainText(nil)
if err != nil {
return ParseResult{Err: fmt.Errorf("parser: plain_text page %d: %w", pageNum, err)}
}
items = append(items, map[string]any{
"text": strings.TrimRight(text, "\n"),
"doc_type_kwd": "text",
"page_number": pageNum,
})
}
return pdfItemsToResult(filename, items, parser.OutputFormat, pageCount)
}