A powerful library for extracting table of contents (TOC) from PDF files with advanced semantic analysis capabilities. Supports both bookmark extraction and intelligent structure recognition with multiple output formats.
$ dotnet add package PdfTocExtractor
PdfTocExtractor 是一个纯 C# 实现的轻量级PDF目录提取库,用于从PDF文件中提取目录(TOC)并导出为多种格式。支持Markdown、JSON、XML、纯文本等格式,完全摆脱命令行依赖,无需额外的PDF处理工具,适合在 .NET 项目中内嵌、分发或集成自动化流程中使用。
通过PdfTocExtractor,您可以轻松从PDF文档中提取书签和目录结构,生成清晰的导航文档,完美适用于文档处理、内容分析和自动化工作流。
🚀 跨平台、零依赖、极速提取,一切尽在 PdfTocExtractor!
dotnet add package PdfTocExtractor
或在 Package Manager Console 中:
Install-Package PdfTocExtractor
using PdfTocExtractor;
using PdfTocExtractor.Exporters;
// 创建提取器实例
var extractor = new PdfTocExtractor();
// 提取目录
var tocItems = await extractor.ExtractTocAsync("document.pdf");
// 导出为Markdown
await extractor.ExportToFileAsync(tocItems, "output.md", "markdown");
// 导出为JSON
await extractor.ExportToFileAsync(tocItems, "output.json", "json");
// 使用自定义导出选项
var exportOptions = new ExportOptions
{
MaxDepth = 3,
IncludePageNumbers = true,
CustomTitle = "文档目录",
IndentString = " ",
PageNumberFormat = "第 {0} 页"
};
await extractor.ExportToFileAsync(tocItems, "output.md", "markdown", exportOptions);
// 直接从PDF提取并导出
await extractor.ExtractAndExportAsync("document.pdf", "output.xml");
md, markdown) - 适合文档和网页显示,支持层级结构json) - 适合程序处理和API集成,包含完整元数据xml) - 结构化数据交换,标准化格式txt, text) - 纯文本格式,简洁易读MaxDepth - 最大层级深度(0表示无限制)IncludePageNumbers - 是否包含页码信息IncludeLinks - 是否包含链接(如果格式支持)CustomTitle - 自定义文档标题IndentString - 缩进字符串PageNumberFormat - 页码格式化字符串Encoding - 文件编码格式您可以通过实现 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());
# 文档目录
- [第1章 概述](#第1章-概述) (第 1 页)
- [1.1 背景](#11-背景) (第 2 页)
- [1.2 目标](#12-目标) (第 3 页)
- [第2章 技术架构](#第2章-技术架构) (第 5 页)
- [2.1 系统设计](#21-系统设计) (第 6 页)
- [2.1.1 核心组件](#211-核心组件) (第 7 页)
- [2.1.2 数据流](#212-数据流) (第 8 页)
{
"title": "文档目录",
"generatedAt": "2024-01-15T10:30:00",
"items": [
{
"title": "第1章 概述",
"level": 1,
"page": "第 1 页",
"pageNumber": 1,
"children": [
{
"title": "1.1 背景",
"level": 2,
"page": "第 2 页",
"pageNumber": 2
}
]
}
]
}
PdfTocExtractor 使用以下技术:
如果遇到此错误,通常是因为PDF文件使用了加密或权限保护。请确保已安装 itext7.bouncy-castle-adapter 包:
dotnet add package itext7.bouncy-castle-adapter
这表示PDF文件确实没有嵌入的书签/目录信息。可以:
MIT License
如果您遇到问题或有建议,请: