发布于2026-07-23 阅读(0)
扫一扫,手机访问
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的功能覆盖了日常开发中最常见的几个场景:
这些特性组合起来,基本覆盖了从“读取”到“输出”的完整链路。

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


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

这是最基础的操作——拿到一份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处理中的高频需求。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); }

有时候需要把图片统一打包成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页面渲染成图片,比如生成预览图。这里需要逐页处理:先获取页面读取器,然后通过 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
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8