Nong.Pdf.Parse:基于 .NET 的 PDF 解析底座项目

可用于 .NET 场景将 PDF 字节流解析为可导航对象模型,支撑文字提取、页图渲染与分流判定。项目自研解析器,依据 ISO 32000,提供页树、交叉引用、对象解引用与口令打开,无第三方 PDF 依赖。【此简介由AI生成】

分支1Tags0
文件最后提交记录最后更新时间
3 天前
1 个月前
1 个月前
1 个月前
1 个月前
3 天前
3 天前
3 天前
3 天前
3 天前
3 天前
3 天前
1 天前
3 天前
1 个月前
1 个月前
1 天前
3 天前

Nong.Pdf.Parse

PDF 文件是字节流,上层要的是对象树、页列表和能解码的流内容。这个库把 PDF 字节解析成可导航的对象模型:词法切分、交叉引用定位、页树遍历、滤镜解码、标准加密解密。解析器自研,不依赖第三方 PDF 库。

Text、Image、Info、Layout 四个包都建立在这一层上,不各自解析字节。

对外是什么

  • 文档(IDisposable):入口。两个构造 new 文档(路径, 口令?)、new 文档(字节, 口令?, 来源?);成员 页面们(List<页面>)、目录、尾部字典、取对象(编号)、解引用(对象)、静态 输入上限MB。
  • 对象体系(对象 的子类):名称对象、数字对象、字符串对象、布尔对象、空对象、字典对象、数组对象、流对象、间接引用。字典有 取名称、取数字、取整数、取字符串文本、取布尔、取数组、取解引用 等按类型取值方法。
  • 对象扫描器:词法层,把字节切成名称、数字、字符串、字典、数组、流、间接引用。
  • 交叉引用表:经典表、交叉引用流、混合模式 /XRefStm,以及对象流(type 2 条目)都能定位。
  • 页树:遍历(文档, 目录) 收集叶子页。页面 给 宽、高(MediaBox 优先、CropBox 兜底,都沿 Parent 链继承)、资源们(同样继承)、图像们(页面资源里 /Subtype /Image 的流,按 XObject 枚举序)。
  • 滤镜:解一段 处理单个滤镜,解码链 处理 /Filter 数组并应用 /DecodeParms 的 Predictor,Flate解压到 流式解压。
  • 图像对象:给宽、高、位深、颜色空间名、原始字节,以及 转图像字节()(PNG)和 解码图像租借()(池化位图,DCT 走 JPEG 裸流、CCITT 传真位展开)。
  • 解密:解密器.建立 从尾部字典建解密器,未加密返回 null;异常类型是 缺口令异常、口令不匹配异常、加密版本不支持异常。
  • 矩阵运算:PDF 变换矩阵乘法。

怎么调

using Nong.Pdf.Parse;

using var 文档 = new 文档("论文.pdf", 口令: null);

// 页列表
foreach (var 页 in 文档.页面们)
    Console.WriteLine($"{页.宽}×{页.高} 图 {页.图像们.Count} 张");

// 按对象编号取对象并解引用
var 对象 = 文档.解引用(文档.取对象(12));

// 解码一个流(含滤镜链与 Predictor)
if (文档.解引用(文档.目录.取("Metadata")) is 流对象 流)
    Console.WriteLine(流.解码字节(文档.取对象).Length);

外部依赖

依赖 用途
Nong.Sharp.Read 位图类型,JPEG 裸流与 CCITT 传真解码
Nong.Sharp.Write PNG 编码(转图像字节)

第三方 PDF 库一个都不用。

已知边界

  • 文档整份读进内存,缺省单文件上限 100MB,可用 NONG_PDF_MAX_INPUT_MB 调;路径入口和字节入口都挡,超限抛 Pdf输入过大异常。
  • 加密只支持 Standard 过滤器、V4/R4、AESV2(AES-128)。V5/R6 的 AES-256、其他过滤器与加密方法抛 加密版本不支持异常,拿外部工具解密后再送。
  • 无口令与口令错是两个异常:缺口令异常、口令不匹配异常,不会静默返回空内容。
  • 滤镜实现 Flate 与 ASCIIHex;DCT/JPX 在本层直通,像素解码交给图像解码器;LZW、RunLength、ASCII85 等未实现的滤镜抛 不支持特性异常,不把压缩字节当解码结果。JPEG2000 图像明确不支持。
  • 尾部没有合法 startxref、/Root 不是 Catalog、页树深度超过 100 层,抛 非法PDF异常。损坏文件不走暴力搜索偏移的兜底路径。
  • 页树的容器按间接引用编号去重,/Kids 成环时跳过,不无限递归。

项目介绍

可用于 .NET 场景将 PDF 字节流解析为可导航对象模型,支撑文字提取、页图渲染与分流判定。项目自研解析器,依据 ISO 32000,提供页树、交叉引用、对象解引用与口令打开,无第三方 PDF 依赖。【此简介由AI生成】

定制我的领域