Files
ragflow/internal/parser/parser/pdf_parser_cgo.go
Zhichang Yu 55af1d70f3 Align Go parser backends and PDF pipeline with Python (#16676)
Ports remaining Go parser wiring and PDF backends, adds tenant-aware VLM
dispatch, aligns post-processing with Python, and adds end-to-end
pipeline coverage with a generated six-page PDF.
2026-07-06 19:50:54 +08:00

53 lines
1.6 KiB
Go

//go:build cgo
package parser
import (
"context"
"errors"
"fmt"
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}
}
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
}