Files
ragflow/internal/parser/parser/pdf_parser_cgo.go
Jack 10c00a9614 Feat: add built in DSL file API (#17003)
### Summary

1. list and get by id API for builtin DSL
2. add DSL default component param values validation
3. remove all hard code keys for parser config
2026-07-18 11:00:08 +08:00

55 lines
1.7 KiB
Go

//go:build cgo
package parser
import (
"context"
"errors"
"fmt"
"ragflow/internal/common"
deepdocpdf "ragflow/internal/deepdoc/parser/pdf"
deepdoctype "ragflow/internal/deepdoc/parser/type"
)
func (p *PDFParser) ParseWithResult(filename string, data []byte) ParseResult {
if err := p.validateParseMethod(); err != nil {
return ParseResult{Err: err}
}
common.Info(fmt.Sprintf("------------file: %s, parse_method: %s", filename, p.ParseMethod))
switch normalizePDFParseMethod(p.ParseMethod) {
case "plain_text":
return parsePDFWithPlainText(filename, data, p)
case "mineru":
return parsePDFWithMinerU(filename, data, p)
case "paddleocr":
return parsePDFWithPaddleOCR(filename, data, p)
case "docling":
return parsePDFWithDocling(filename, data, p)
case "opendataloader":
return parsePDFWithOpenDataLoader(filename, data, p)
case "somark":
return parsePDFWithSoMark(filename, data, p)
case "tcadp":
return parsePDFWithTCADP(filename, data, p)
}
cfg := deepdoctype.DefaultParserConfig()
cfg.SkipOCR = false
parser := deepdocpdf.NewParser(cfg)
res := parsePDFWithDeepDocOptions(context.Background(), filename, data, pdfPostProcessOptions{
outputFormat: p.OutputFormat,
zoom: cfg.Zoom,
enableMultiColumn: p.EnableMultiColumn,
flattenMediaToText: p.FlattenMediaToText,
removeTOC: p.RemoveTOC,
removeHeaderFooter: p.RemoveHeaderFooter,
}, parser.Parse)
if res.Err != nil && errors.Is(res.Err, deepdocpdf.ErrNoPDFData) {
return ParseResult{Err: fmt.Errorf("%w: %s", ErrPDFEngineUnavailable, filename)}
}
if res.Err != nil && res.Err.Error() == "deepdoc/pdf: cgo required" {
return ParseResult{Err: fmt.Errorf("%w: %s", ErrPDFEngineUnavailable, filename)}
}
return res
}