You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#提取PDF指定文本并转为结构化JSON/Excel的问题咨询

问题根因

你当前的核心问题是没有对PDF提取出的原始文本做结构化解析,直接将整段长字符串传入JsonConvert.SerializeObject,序列化的结果自然只是带转义的纯字符串,不会生成键值对结构的JSON。

解决思路

你现有Spire套件完全可以覆盖需求,无需引入其他依赖,按以下步骤调整即可:

  1. 原始文本预处理:将PDF提取的文本按行拆分,过滤空行、去除每行首尾空白字符
  2. 结构化解析:根据你提供的样例结构编写解析逻辑,将每行内容转换为键值对存入字典
  3. 输出结构化数据:可选择序列化字典得到目标格式JSON,或直接将字典内容写入Excel

1. 新增文本解析逻辑

添加解析方法将原始文本转为Dictionary<string, string>:

using System.Collections.Generic;
using System.Text.RegularExpressions;

private static Dictionary<string, string> ParseTermSheetText(string rawText)
{
    var result = new Dictionary<string, string>();
    // 按换行符拆分文本,过滤空行
    var lines = rawText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
                       .Select(l => l.Trim())
                       .Where(l => !string.IsNullOrEmpty(l))
                       .ToList();
    if (lines.Count < 5) return result; // 样例最少5行,可根据实际调整
    
    // 处理前两行Analysis字段
    result.Add("Analysis", lines[1]);
    
    // 处理后续键值对行,用2个以上空格作为分隔符拆分
    for (int i = 2; i < lines.Count; i++)
    {
        var parts = Regex.Split(lines[i], @"\s{2,}"); // 匹配2个及以上连续空格
        if (parts.Length >= 2)
        {
            var key = parts[0].Trim();
            var value = string.Join(" ", parts.Skip(1)).Trim();
            if (!result.ContainsKey(key))
            {
                result.Add(key, value);
            }
        }
    }
    return result;
}

2. 调整序列化逻辑

修改Serialize_into_Json方法,直接序列化解析得到的字典:

private static string Serialize_into_Json(Dictionary<string, string> data)
{
    // 格式化输出JSON,缩进可按需移除
    return JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented);
}

3. 调整Convert_To_Json_Format方法

private void Convert_To_Json_Format(string baseTextFile)
{
    string streamText = new StreamReader(baseTextFile).ReadToEnd();
    // 先解析为结构化字典
    var structuredData = ParseTermSheetText(streamText);
    // 序列化得到目标JSON
    string serializeData = Serialize_into_Json(structuredData);
    string newFile = @"my_disk:\my_path\structured_data.json";
    File.WriteAllText(newFile, serializeData);
    
    // 直接导出Excel可选,无需经过JSON
    ExportToExcel(structuredData, @"my_disk:\my_path\output.xlsx");
    
    System.Diagnostics.Process.Start(newFile);
}

4. 新增Excel导出方法(可选,直接用Spire.Xls实现)

private void ExportToExcel(Dictionary<string, string> data, string outputPath)
{
    Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
    workbook.CreateEmptySheets(1);
    Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
    
    // 写入表头
    sheet.Range[1, 1].Text = "字段名";
    sheet.Range[1, 2].Text = "字段值";
    
    // 写入键值对
    int rowIndex = 2;
    foreach (var item in data)
    {
        sheet.Range[rowIndex, 1].Text = item.Key;
        sheet.Range[rowIndex, 2].Text = item.Value;
        rowIndex++;
    }
    
    // 自动调整列宽
    sheet.AllocatedRange.AutoFitColumns();
    workbook.SaveToFile(outputPath, Spire.Xls.ExcelVersion.Version2016);
}

拓展说明

如果后续PDF结构有变化,比如键值对顺序不固定,可以改为关键词匹配解析:检测行文本是否包含目标字段名(如Reference Date),匹配成功后直接提取该行后半部分作为对应值,适配性更强。

内容的提问来源于stack exchange,提问作者James06

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:36:05