.NET使用DocNET库实现快速高效的操作PDF文档
DocNET是基于ChromiumPDFium引擎的开源.NET库,支持Windows、Linux、macOS等跨平台运行。它提供全面的PDF处理功能,包括获取版本页数、文本提取、文档分割合并、解锁加密、PDF转图片及JPEG转PDF等,通过简洁统一的API实现高效、稳定的文档处理操作,同时支持批量处理。
PDF文档在日常工作中几乎无处不在,无论是合同、报告还是技术手册,都离不开它的身影。在.NET生态下,如何高效地处理PDF——比如提取内容、编辑、转换格式——一直是开发者关注的话题。今天要聊的DocNET库,正是一个基于Chromium的PDFium引擎封装的轻量级工具,既能跨平台运行,又保持了不错的性能。
项目介绍
DocNET是一个开源(MIT license)的.NET库,支持Windows、Linux和macOS三大平台。它的底层是C++编写的PDFium(Chromium项目中的PDF渲染引擎),而对外暴露的是.NET Standard 2.0接口,这意味着你可以在.NET Framework、.NET Core乃至最新的.NET 9项目中直接使用。简单来说,它把复杂的PDF处理逻辑封装成了简洁的API,让开发者可以专注于业务逻辑,而不是PDF底层协议。
项目特性
DocNET的功能覆盖了日常开发中最常见的几个场景:
- PDF提取:支持获取PDF版本、页数、页面尺寸、页面文本内容,甚至能提取字符的字体大小等元信息。
- PDF编辑:提供了分割、合并、解锁等基础操作,足以应对大部分文档管理需求。
- 格式转换:可以将PDF页面渲染为图像,也可以把JPEG图片转换为PDF文件,逆向操作也能轻松搞定。
这些特性组合起来,基本覆盖了从“读取”到“输出”的完整链路。
项目源代码

创建DocNETExercises控制台应用
先创建一个名为 DocNETExercises 的.NET 9控制台应用程序,这是后续所有示例的载体。


Docnet.Core NuGet包安装
在NuGet包管理器中搜索 Docnet.Core 并安装即可。注意选择与项目目标框架兼容的版本。

获取 PDF 文件页码和版本
这是最基础的操作——拿到一份PDF,总得先知道它有多少页、是什么版本。DocNET通过 GetDocReader 打开文档后,调用 GetPageCount() 和 GetPdfVersion() 即可获取。注意创建 DocReader 时需要传入页面尺寸参数,这里我们用了1080×1920,可以根据实际渲染需求调整。
////// 获取 PDF 文件页码和版本 /// public static void GetPDFPageCountAndVersion() { using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920)); var getPageCount = docReader.GetPageCount(); var getPdfVersion = docReader.GetPdfVersion(); Console.WriteLine($"PageCount:{getPageCount},PdfVersion:{getPdfVersion}"); }

获取 PDF 文件的文本内容
提取文本是PDF处理中的高频需求。DocNET支持按页读取,注意 GetPageReader 的索引从0开始。调用 GetText() 即可拿到该页面的纯文本内容,内部自动处理了字符编码,省去了不少麻烦。
////// 获取 PDF 文件的文本内容 /// public static void GetPDFText() { using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920)); using var pageReader = docReader.GetPageReader(0); //注意pageIndex从0开始 // 获取指定页面的文本(自动处理编码) string pageText = pageReader.GetText(); Console.WriteLine(pageText); }

将 JPEG 图片转换为 PDF 文件
有时候需要把图片统一打包成PDF,比如扫描件存档。DocNET提供了 JpegToPdf 方法,只需传入图片字节数组和尺寸信息,返回的字节可以直接写入文件。注意图片路径和尺寸需要根据实际情况调整。
////// 将 JPEG 图片转换为 PDF 文件 /// public static void JPEGImageConvertToPDF() { var file = new JpegImage { Bytes = File.ReadAllBytes("Assets/image1.jpeg"), Width = 580, Height = 387 }; var bytes = _docNetInstance.JpegToPdf(new[] { file }); File.WriteAllBytes("Assets/output_file.pdf", bytes); }

将 PDF 文件转换为图片
反向操作同样常用——把PDF页面渲染成图片,比如生成预览图。这里需要逐页处理:先获取页面读取器,然后通过 GetImage() 拿到原始字节,再结合页面尺寸构建Bitmap。示例中还额外演示了如何用红色矩形框标注每个字符的位置,这在OCR或内容分析场景中很有用。
////// 将 PDF 文件转换为图片 /// public static void PDFConvertToImage() { using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920)); //指定第一页 using var pageReader = docReader.GetPageReader(0); var rawBytes = pageReader.GetImage(); var width = pageReader.GetPageWidth(); var height = pageReader.GetPageHeight(); var characters = pageReader.GetCharacters(); using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); AddBytes(bmp, rawBytes); DrawRectangles(bmp, characters); using var stream = new MemoryStream(); bmp.Sa ve(stream, ImageFormat.Png); File.WriteAllBytes("Assets/output_image.png", stream.ToArray()); } private static void AddBytes(Bitmap bmp, byte[] rawBytes) { var rect = new Rectangle(0, 0, bmp.Width, bmp.Height); var bmpData = bmp.LockBits(rect, ImageLockMode.WriteOnly, bmp.PixelFormat); var pNative = bmpData.Scan0; Marshal.Copy(rawBytes, 0, pNative, rawBytes.Length); bmp.UnlockBits(bmpData); } private static void DrawRectangles(Bitmap bmp, IEnumerablecharacters) { var pen = new Pen(Color.Red); using var graphics = Graphics.FromImage(bmp); foreach (var c in characters) { var rect = new Rectangle(c.Box.Left, c.Box.Top, c.Box.Right - c.Box.Left, c.Box.Bottom - c.Box.Top); graphics.DrawRectangle(pen, rect); } }

项目源码地址
更多实用功能和特性,欢迎前往项目开源地址查看。
- GitHub开源地址:https://github.com/GowenGit/docnet
- 本文示例源码地址:https://github.com/YSGStudyHards/DotNetExercises/tree/master/DocNETExercises
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。
Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,













