Nong.PdfPig:基于 .NET 的 PDF 处理库项目

已归档

Nong.PdfPig 是 PDF 读取底座(UglyToad PdfPig 的 Nong fork,net10.0):PDF 文本提取 + 版面分析 + 表格识别。相对上游:#1266 CJK 字体名乱码修复、TableExtractor 表格识别(线检测 + 坐标聚类 + 假表格过滤,54 个真实 PDF 验证误报 315→4)、段落还原、WriteSvg 矢量导出(化学式结构式 → SVG)、批注读取。Apache 2.0,Nong.Convert 的 PDF 读取依赖此包。

分支1Tags0
当前项目代码仓暂无内容

NONG PDFPIG

NONG PDFPIG

NONG PDFPIG

【参考归档 · 已退役】 —— 本包为 Nong 早期对 UglyToad/PdfPig 的 fork,已被自研解析器 Nong.Pdf.Parse 全面替代,仅作历史参考,不再维护

它解决什么问题 · 快速开始 · 我们的增强 · 上游同步 · 技术栈 ·

退役声明

本包是 Nong 项目 2026 年早期的 PDF 读取底座(fork 自 UglyToad/PdfPig)。自研解析器 Nong.Pdf.Parse 落地后,本包于 2026-08 完成四期退役,PDF 板块全部消费方已切换至 Nong.Pdf.Parse。本仓此后仅作参考归档:保留了 fork 期间的增强(表格识别、批注、矢量路径导出等)与上游同步历史,可供查阅 ISO 32000 解析的工程实现细节;不接受功能变更,不跟进上游。

它解决什么问题(历史)

PDF 没有结构(不像 docx/xlsx/pptx 是 XML),只能靠解析引擎按 ISO 32000 标准把页面内容(文字/图片/矢量路径/批注)读出来。Nong 项目不重写 PDF 引擎(重新实现 ISO 32000 是几十万行的无底洞),直接 fork 上游 PdfPig 做底座,把 Nong 需要的增强加进去。

  • fork 自 UglyToad/PdfPig(上游 15 万行,只加不删,跟上游同步)
  • 读 PDF 的底层能力:文字块(带坐标/字体/字号)、图片(PNG/JPEG 原始字节)、表格(Nong 增强)、批注、矢量路径(WriteSvg 导出)
  • Convert 的 PDF 读取靠它:Nong.Convert 的 PDF 读取器是薄层,底层全在这

快速开始

环境要求

  • .NET 10(net10.0)
  • 上游同步时 LangVersion 跟上游(12→13)

构建

dotnet build Nong.PdfPig/Nong.PdfPig.csproj

最简单的用法

using UglyToad.PdfPig;

using (PdfDocument document = PdfDocument.Open(@"文件.pdf"))
{
    foreach (Page page in document.GetPages())
    {
        // 文字块(带坐标/字体/字号,段落还原用 ContentOrderTextExtractor)
        var 词 = page.GetWords();
        // 图片(TryGetPng/JPEG 原始字节)
        // 批注(Page.GetAnnotations())
    }
}

建议用 ContentOrderTextExtractor.GetText(page) 还原段落,不要直接用 page.Text(它保留内部内容顺序,基本不是你要的阅读顺序)。

我们的增强

增强 位置 说明
表格识别 TableExtractor DocumentLayoutAnalysis/TableExtractor.cs 无框表格启发式识别(列边界聚类 + 线检测),54 真实样本校准;上游没有表格识别模块(只有版面分块),这是 Nong 自己的生产模块
WriteSvg 矢量导出 PdfPig 现成一级接口 矢量路径(IPathCommand)→ SVG,Convert 用它把 PDF 化学结构式存成 资源/图形N.svg
段落还原 ContentOrderTextExtractor 完整句子 + 双换行拆段(Convert 阶段五 v2 实测胜出 RecursiveXYCut)
化学式几何 页读取薄层 闭合路径数/键线/曲线/原子符号(Convert 侧,底层是 WriteSvg)

fork 纪律:fork 只加不删(删上游文件破坏 merge);上游同步 1-2 月一次(merge → csproj 全 --ours → LangVersion 跟上 → build → 四格式回归 → pack 覆盖 NuGet 缓存 → push)。

上游同步

UglyToad/PdfPig 同步(2026-08-09 首次同步 8 commits):

git fetch upstream && git merge upstream/master
# csproj 全 --ours(保留我们的打包配置)
# LangVersion 跟上游(12→13)
# build → 四格式回归 → pack 覆盖 NuGet 缓存 → push

上游自己也没有表格识别——Nong 的 TableExtractor 就是正生产车(fork 只加不删,删上游文件破坏 merge)。

技术栈

  • .NET 10(net10.0)
  • ISO 32000(PDF 标准,PdfPig 实现)
  • 上游:UglyToad/PdfPig(MIT)
  • NuGet 包名:Nong.PdfPig(1.1.0,含 TableExtractor,Convert 引 NuGet 包不是源码)

项目介绍

Nong.PdfPig 是 PDF 读取底座(UglyToad PdfPig 的 Nong fork,net10.0):PDF 文本提取 + 版面分析 + 表格识别。相对上游:#1266 CJK 字体名乱码修复、TableExtractor 表格识别(线检测 + 坐标聚类 + 假表格过滤,54 个真实 PDF 验证误报 315→4)、段落还原、WriteSvg 矢量导出(化学式结构式 → SVG)、批注读取。Apache 2.0,Nong.Convert 的 PDF 读取依赖此包。

定制我的领域