PdfTocExtractor.Cli 2.0.0

dotnet tool install --global PdfTocExtractor.Cli --version 2.0.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local PdfTocExtractor.Cli --version 2.0.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=PdfTocExtractor.Cli&version=2.0.0
                    
nuke :add-package PdfTocExtractor.Cli --version 2.0.0
                    

PdfTocExtractor.Cli

License .NET NuGet

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

通过PdfTocExtractor.Cli,您可以轻松从PDF文档中提取书签和目录结构,生成清晰的导航文档,完美适用于文档处理、内容分析和自动化工作流。

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

✨ 功能特点

  • 📖 从PDF文件提取书签/目录信息
  • 📄 支持多种输出格式:Markdown、JSON、XML、纯文本
  • 🎯 可配置的导出选项(层级深度、页码格式等)
  • 🛠️ 提供诊断工具,帮助排查PDF读取问题
  • ⚡ 异步操作支持,高性能处理
  • 🚀 支持AOT编译,原生性能无需.NET运行时
  • 🌐 跨平台支持:Windows、Linux、macOS

📦 安装

作为 .NET Global Tool 安装

dotnet tool install --global PdfTocExtractor.Cli

从 GitHub Releases 下载

访问 Releases页面 下载适合您平台的可执行文件:

  • Windows: PdfTocExtractor-windows-{version}.zip
  • Linux: PdfTocExtractor-linux-{version}.tar.gz
  • macOS: PdfTocExtractor-macOS-{version}.tar.gz

从源码构建

git clone https://github.com/star-plan/pdf-toc-extractor.git
cd PdfTocExtractor/src/PdfTocExtractor.Cli
dotnet build -c Release

🚀 使用方法

基本用法

# 基本用法 - 提取PDF目录并保存为Markdown
pdftoc extract document.pdf -o output.md

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

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

高级用法

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

# 包含页码和链接信息
pdftoc extract document.pdf -o output.md --include-pages --include-links

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

# 诊断PDF文件问题(当遇到读取错误时很有用)
pdftoc diagnose document.pdf

📋 参数说明

提取命令(extract)

参数 缩写 说明 是否必需
input - 输入PDF文件路径
--output -o 输出文件路径 否,默认为控制台输出
--format -f 输出格式 (markdown/json/xml/text) 否,默认为markdown
--max-depth - 最大层级深度 否,默认为0(无限制)
--include-pages - 包含页码信息 否,默认为true
--include-links - 包含链接信息 否,默认为false
--title - 自定义文档标题
--indent - 缩进字符串 否,默认为" "
--page-format - 页码格式化字符串 否,默认为"第 {0} 页"
--verbose -v 显示详细输出

诊断命令(diagnose)

参数 说明 是否必需
pdf-file 要诊断的PDF文件路径

📄 支持的输出格式

  • Markdown (md, markdown) - 适合文档和网页显示,支持层级结构
  • JSON (json) - 适合程序处理和API集成,包含完整元数据
  • XML (xml) - 结构化数据交换,标准化格式
  • Text (txt, text) - 纯文本格式,简洁易读

📝 示例输出

提取PDF目录

正在从 document.pdf 提取目录...
找到 15 个目录项
正在导出为 Markdown 格式...
目录已成功导出到: output.md

Markdown 输出示例

# 文档目录

- [第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 页)

JSON 输出示例

{
  "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
        }
      ]
    }
  ]
}

🔧 故障排除

常见问题

"PdfEncryption exception" 错误

如果遇到此错误,通常是因为PDF文件使用了加密或权限保护。请尝试以下解决方案:

  1. 使用诊断命令

    pdftoc diagnose your-document.pdf
    

    这会显示PDF文件的详细信息,帮助诊断问题。

  2. PDF文件类型

    • ✅ 支持:有权限保护但无用户密码的PDF
    • ✅ 支持:未加密的PDF
    • ❌ 不支持:需要用户密码的PDF(功能开发中)
"此PDF文件没有目录(书签)信息" 错误

这表示PDF文件确实没有嵌入的书签/目录信息。可以:

  • 使用诊断命令确认:pdftoc diagnose your-document.pdf
  • 检查PDF是否在其他阅读器中显示目录面板
  • 考虑使用其他工具为PDF添加书签
输出文件为空或格式错误
  1. 检查输入PDF是否有有效的目录结构
  2. 尝试不同的输出格式:-f json-f xml
  3. 使用 --verbose 选项查看详细处理信息

🛠️ 技术实现

PdfTocExtractor.Cli 使用以下技术:

📄 许可证

MIT License

🤝 相关项目

📞 支持

如果您遇到问题或有建议,请:

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
2.0.0 84 8/3/2025
1.1.1 45 8/2/2025
1.1.0 69 8/1/2025
1.0.1 75 8/1/2025
1.0.0 74 8/1/2025