package pkg import ( "encoding/json" "fmt" "os" "os/exec" "path/filepath" ) // ExtractWordContent 从docx文件提取内容 func ExtractWordContent(filePath, format string) (string, error) { // 获取exe路径 baseDir, err := os.Getwd() if err != nil { return "", fmt.Errorf("获取工作目录失败: %w", err) } exePath := filepath.Join(baseDir, "plugins", "docx_extractor.exe") // 检查exe是否存在 if _, err := os.Stat(exePath); os.IsNotExist(err) { return "", fmt.Errorf("exe不存在: %s", exePath) } // 检查docx文件是否存在 if _, err := os.Stat(filePath); os.IsNotExist(err) { return "", fmt.Errorf("文件不存在: %s", filePath) } // 正确调用方式:使用 --format 参数 cmd := exec.Command(exePath, filePath, "--format", format, "--json") output, err := cmd.Output() if err != nil { // 获取错误输出 if exitErr, ok := err.(*exec.ExitError); ok { return "", fmt.Errorf("执行失败: %w, stderr: %s", err, string(exitErr.Stderr)) } return "", fmt.Errorf("执行失败: %w", err) } // 解析JSON var result struct { Success bool `json:"success"` Content string `json:"content"` Error string `json:"error"` } if err := json.Unmarshal(output, &result); err != nil { return "", fmt.Errorf("解析结果失败: %w, output: %s", err, string(output)) } if !result.Success { return "", fmt.Errorf("提取失败: %s", result.Error) } return result.Content, nil }