纯 C#实现+AOT 打造的智能PDF目录提取工具 PdfTocExtractor

目录

前言

为什么是目录提取?

PdfTocExtractor

✨ 功能特点

📄 支持的输出格式

使用方法

命令行

作为库使用

扩展性

技术实现

TODO 计划

AI 增强功能

Web 服务接口

Web 前端界面

技术架构优化

高级功能

企业级功能

小结


前言

最近在做标书的时候发现,有些文档文字量很大,想让大模型完全解读不太现实,先不说 context 长度够不够,首先 token 消耗量就爆炸了

于是想到使用取巧的方式,提取 PDF 的目录来进行分析,于是说干就干,用 C# 写了一个工具来实现目录提取,结果效果还不错

后续我又继续完善这个工具,增加了语义识别等功能

继续沿用 C# + AOT + GitHub Actions + dotnet tool + nuget 这套流程的开发

项目地址: https://github.com/star-plan/pdf-toc-extractor

类似项目:

为什么是目录提取?

PDF 转 word、markdown 等格式的工具太多了

咱不卷这个赛道

(说是这么说,我最近也做了一个🤣,不排除后续把 PDF 转文档的功能集成到这个项目里)

咱就专注于这个小众的需求,把 PDF 目录提取这个功能做好

后续又增加了语义识别功能,有些 PDF 并没有内嵌目录,这时候就需要从 PDF 的内容中分析提取出目录。

我一开始使用了模式匹配,结果效果很差,后面换成 NLP 的思路,虽然只是用了最简单的语义识别,但效果的提升非常可观!

可见选对工具还是很重要的

PdfTocExtractor

PdfTocExtractor 是一个纯 C# AOT 实现的轻量级PDF目录提取工具,用于从PDF文件中提取目录(TOC)并导出为多种格式。支持Markdown、JSON、XML、纯文本等格式,完全摆脱命令行依赖,无需额外的PDF处理工具,适合在 .NET 项目中内嵌、分发或集成自动化流程中使用。

通过PdfTocExtractor,您可以轻松从PDF文档中提取书签和目录结构,生成清晰的导航文档。v2.0新增的语义分析功能让您即使在PDF没有嵌入书签的情况下,也能通过基于NLP的智能分析自动识别章节标题,完美适用于文档处理、内容分析和自动化工作流。

🚀 跨平台、零依赖、极速提取,一切尽在 PdfTocExtractor!

✨ 功能特点

  • 📖 从PDF文件提取书签/目录信息

  • 🧠 语义分析功能:基于NLP的智能章节标题识别,适用于无书签PDF

  • 📄 支持多种输出格式:Markdown、JSON、XML、纯文本

  • 🎯 可配置的导出选项(层级深度、页码格式等)

  • 🔧 可扩展的导出器架构,支持自定义格式

  • ⚡ 异步操作支持,高性能处理

  • 🛠️ 提供命令行工具和NuGet包

  • 🚀 支持AOT编译,原生性能无需.NET运行时

  • 🌐 跨平台支持:Windows、Linux、macOS

  • 🎛️ 多种分析模式:默认、严格、宽松模式可选

📄 支持的输出格式

  • Markdown (mdmarkdown) - 适合文档和网页显示,支持层级结构

  • JSON (json) - 适合程序处理和API集成,包含完整元数据

  • XML (xml) - 结构化数据交换,标准化格式

  • Text (txttext) - 纯文本格式,简洁易读

使用方法

依然和其他工具一样

提供了 nuget 库和 dotnet tool 命令行工具

可以作为库引入使用,也可以在命令行使用

命令行

安装 CLI 工具

dotnet tool install --global PdfTocExtractor.Cli

命令行使用

# 🌟 智能提取(推荐)- 自动选择最佳方法
pdftoc smart document.pdf -o output.md

# 📖 提取PDF书签(传统方法)
pdftoc extract document.pdf -o output.md

# 🧠 语义分析(v2.0新功能 - 适用于无书签的PDF)
pdftoc semantic document.pdf -o output.md

# 指定输出格式
pdftoc smart document.pdf -o output.json -f json

# 设置最大层级深度
pdftoc smart document.pdf -o output.xml --max-depth 3

# 自定义标题和页码格式
pdftoc smart document.pdf -o output.txt --title "我的文档目录" --page-format "第 {0} 页"

# 语义分析 - 严格模式(更精确的标题识别)
pdftoc semantic document.pdf -o output.md --mode strict --confidence 0.7

# 语义分析 - 调试模式(查看分析过程)
pdftoc semantic document.pdf -o output.md --debug --verbose

# 结构分析 - 宽松模式(识别更多潜在标题)
pdftoc analyze document.pdf -o output.md --relaxed

# 结构分析 - 自定义参数
pdftoc analyze document.pdf -o output.md --min-font-size 14 --use-bold --debug

# 智能提取 - 带结构分析配置
pdftoc smart document.pdf -o output.md --analysis-preset strict --debug-analysis

# 显示详细输出
pdftoc smart document.pdf -o output.md --verbose

# 诊断PDF文件问题
pdftoc diagnose document.pdf

作为库使用

安装核心库

dotnet add package PdfTocExtractor

代码示例

using PdfTocExtractor;
using PdfTocExtractor.Exporters;
using PdfTocExtractor.Models;

// 创建提取器实例
var extractor = new PdfTocExtractor();

// 🌟 智能提取(推荐)- 自动选择最佳方法
var tocItems = await extractor.ExtractTocSmartAsync("document.pdf");

// 📖 传统方法:提取PDF书签
var bookmarkItems = await extractor.ExtractTocAsync("document.pdf");

// 🧠 结构分析:适用于无书签的PDF
var structureItems = await extractor.AnalyzeStructureAsync("document.pdf");

// 🧠 结构分析:使用自定义配置
var analysisOptions = new StructureAnalysisOptions
{
    MinFontSizeForHeading = 14f,
    UseBoldAsIndicator = true,
    MaxHeadingLevels = 4,
    RequireStandaloneHeadings = true,
    DebugMode = false
};
var customStructureItems = await extractor.AnalyzeStructureAsync("document.pdf", analysisOptions);

// 🧠 使用预设配置
var strictItems = await extractor.AnalyzeStructureAsync("document.pdf", StructureAnalysisOptions.Strict);
var relaxedItems = await extractor.AnalyzeStructureAsync("document.pdf", StructureAnalysisOptions.Relaxed);

// 导出为Markdown
await extractor.ExportToFileAsync(tocItems, "output.md", "markdown");

// 导出为JSON(带自定义选项)
var exportOptions = new ExportOptions
{
    MaxDepth = 3,
    IncludePageNumbers = true,
    CustomTitle = "文档目录"
};
await extractor.ExportToFileAsync(tocItems, "output.json", "json", exportOptions);

// 智能提取并直接导出
await extractor.ExtractSmartAndExportAsync("document.pdf", "output.xml",
    exportOptions: exportOptions,
    structureOptions: StructureAnalysisOptions.Default);

扩展性

可以通过实现 IExporter 接口来创建自定义导出器:

public class CustomExporter : IExporter
{
    public string FormatName => "Custom";
    public string FileExtension => "custom";

    public string Export(IEnumerable<TocItem> tocItems, ExportOptions? options = null)
    {
        // 实现自定义导出逻辑
        return"custom format content";
    }

    public async Task ExportToFileAsync(IEnumerable<TocItem> tocItems, string filePath, ExportOptions? options = null)
    {
        var content = Export(tocItems, options);
        await File.WriteAllTextAsync(filePath, content);
    }
}

// 注册自定义导出器
extractor.RegisterExporter("custom", new CustomExporter());

技术实现

PdfTocExtractor 使用以下技术:

  • .NET 9.0 - 现代化的.NET平台

  • iText 9.2.0 - 强大的PDF处理库

  • iText7.bouncy-castle-adapter 9.2.0 - 加密PDF支持(必需)

  • Newtonsoft.Json 13.0.3 - JSON序列化

  • System.CommandLine 2.0.0 - 命令行参数解析

  • AOT编译支持 - 原生性能,无需.NET运行时

TODO 计划

AI 增强功能

  • [ ] AI 目录识别 - 使用机器学习技术识别没有书签/大纲数据的PDF文档目录结构

    • [ ] 集成 OCR 技术识别扫描版PDF中的目录页面

    • [ ] 基于文本分析和格式识别的智能目录提取

    • [ ] 支持多语言目录识别(中文、英文、日文等)

    • [ ] 目录层级结构智能推断

    • [ ] 页码与目录项的自动匹配算法

Web 服务接口

  • [ ] RESTful API 开发 - 提供基于 HTTP 的 Web API 服务

    • [ ] PDF 文件上传接口

    • [ ] 目录提取 API 端点

    • [ ] 多格式导出 API(JSON、XML、Markdown等)

    • [ ] 批量处理接口

    • [ ] 任务状态查询接口

    • [ ] API 文档和 Swagger 集成

Web 前端界面

  • [ ] 现代化 Web UI - 开发用户友好的 Web 前端界面

    • [ ] 拖拽式 PDF 文件上传

    • [ ] 实时目录提取进度显示

    • [ ] 目录结构可视化预览

    • [ ] 多格式导出选项界面

    • [ ] 历史记录和文件管理

    • [ ] 响应式设计,支持移动端访问

技术架构优化

  • [ ] 微服务架构 - 将功能模块化为独立的微服务

    • [ ] PDF 处理服务

    • [ ] AI 识别服务

    • [ ] 文件存储服务

    • [ ] 用户管理服务

    • [ ] 容器化部署支持(Docker)

高级功能

  • [ ] 智能分析 - 提供更多文档分析功能

    • [ ] 文档结构分析和统计

    • [ ] 目录质量评估

    • [ ] 重复内容检测

    • [ ] 文档相似度比较

    • [ ] 批量文档处理和分析报告

企业级功能

  • [ ] 安全和权限 - 企业级安全特性

    • [ ] 用户认证和授权

    • [ ] 文件访问权限控制

    • [ ] 审计日志记录

    • [ ] 数据加密存储

    • [ ] API 访问限制和配额管理

小结

到这里,PdfTocExtractor 的核心能力已经完整亮相:不管你的 PDF 有没有书签,都能一键生成结构化目录;想要命令行批处理还是在代码里灵活调用,都不在话下。⚡️

在实际项目中,这个工具已经帮我节省了大量手动整理目录的时间,也避免了 OCR 误识别、格式混乱等繁琐问题。尤其是新版的 Smart 与 Semantic 双引擎,既快又准,真香!😋

当然,项目还远远没有到“终点”。后续的 AI 目录识别、Web API、现代化 UI 乃至企业权限体系,都在 Roadmap 上等着逐步落地。如果你也对这些方向感兴趣,欢迎 issue / PR / Star,一起把它打造成最好用的 PDF 目录工具!🌟

引入地址

基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)内容概要:本文档介绍了基于遗传算法的微电网调度模型,涵盖风能、太阳能、蓄电池和微型燃气轮机等多种能源形式,并通过Matlab代码实现系统优化调度。该模型旨在解决微电网中多能源协调运行的问题,优化能源分配,降低运行成本,提高可再生能源利用率,同时考虑系统稳定性与经济性。文中详细阐述了遗传算法在求解微电网多目标优化问题中的应用,包括编码方式、适应度函数设计、约束处理及算法流程,并提供了完整的仿真代码供复现与学习。此外,文档还列举了大量相关电力系统优化案例,如负荷预测、储能配置、潮流计算等,展示了广泛的应用背景和技术支撑。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能电网优化研究的工程技术人员。; 使用场景及目标:①学习遗传算法在微电网调度中的具体实现方法;②掌握多能源系统建模与优化调度的技术路线;③为科研项目、毕业设计或实际工程提供可复用的代码框架与算法参考; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注目标函数构建与约束条件处理,同时可参考文档中提供的其他优化案例进行拓展学习,以提升综合应用能力。
此项目旨在实现一个简易而实用的RFID智能门禁控制系统。采用经典的51系列单片机——STC89C52作为核心控制器,集成MFRC522射频识别模块来读取RFID卡片信息。用户界面通过128x64像素的LCD显示屏展示相关信息,同时配备了键盘用于密码的输入、验证及修改。此设计结合了RFID技术的高效率识别与单片机的强大控制能力,适用于学习、教学或小型安防项目。 资源包含 源代码:完整C语言编写的源程序,涵盖了RFID识别、密码验证逻辑、显示控制以及用户交互等功能模块。 原理图:详细展示了整个系统的电路连接,包括单片机、MFRC522模块、LCD12864屏幕、按键等组件的电气连接方式,便于理解和自制。 技术特点 RFID技术应用:通过MFRC522模块实现非接触式身份认证,提升门禁安全性与便捷性。 人机交互界面:利用LCD12864显示屏直观展示状态信息,并通过物理按键进行操作,增加了系统的易用性。 密码安全机制:支持用户密码的设定和更改,增强系统安全性。 51单片机编程:适合初学者和专业人士学习51单片机应用开发,尤其是嵌入式系统与物联网领域的实践。 使用指南 环境搭建:确保你有合适的IDE(如Keil uVision)安装以编译51单片机的C代码。 原理图分析:详细阅读原理图,了解各部件间的连接,这对于正确搭建硬件平台至关重要。 编译与上传:将提供的源代码编译无误后,通过编程器或ISP接口烧录到STC89C52单片机中。 硬件组装:根据原理图搭建电路,确保所有组件正确连接。 测试与调试:完成后进行功能测试,可能需要对代码或硬件做适当调整以达到最佳工作状态。
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文研究基于非支配排序的蜣螂优化算法(NSDBO)在微电网多目标优化调度中的应用,旨在解决微电网运行中经济性、环保性与稳定性等多重目标的协同优化问题。文中详细介绍了NSDBO算法的设计与实现过程,结合Matlab代码对微电网调度模型进行仿真验证,展示了该算法在处理复杂多目标优化问题上的有效性与优越性。同时,文档还提供了丰富的科研资源支持,涵盖智能优化算法、机器学习、路径规划、电力系统管理等多个领域,配套网盘资料便于读者复现与拓展研究。; 适合人群:具备一定电力系统或优化算法基础,从事科研工作的研究生、高校教师及工程技术人员,尤其适合关注微电网调度、智能优化算法应用的研究者。; 使用场景及目标:①掌握NSDBO等智能优化算法在多目标问题中的设计与实现方法;②学习微电网多目标调度建模与Matlab仿真技术;③复现论文结果并开展算法改进与对比研究; 阅读建议:建议结合提供的Matlab代码和网盘资源,逐步调试与运行算法程序,重点关注算法流程、目标函数构建与仿真结果分析,同时可参考文中提及的其他优化方法进行横向对比,深化对智能优化在电力系统中应用的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值