商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > .NET使用DocNET库实现快速高效的操作PDF文档

.NET使用DocNET库实现快速高效的操作PDF文档

  发布于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的功能覆盖了日常开发中最常见的几个场景:

  • PDF提取:支持获取PDF版本、页数、页面尺寸、页面文本内容,甚至能提取字符的字体大小等元信息。
  • PDF编辑:提供了分割、合并、解锁等基础操作,足以应对大部分文档管理需求。
  • 格式转换:可以将PDF页面渲染为图像,也可以把JPEG图片转换为PDF文件,逆向操作也能轻松搞定。

这些特性组合起来,基本覆盖了从“读取”到“输出”的完整链路。

项目源代码

.NET使用DocNET库实现快速高效的操作PDF文档

创建DocNETExercises控制台应用

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

.NET使用DocNET库实现快速高效的操作PDF文档

.NET使用DocNET库实现快速高效的操作PDF文档

Docnet.Core NuGet包安装

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

.NET使用DocNET库实现快速高效的操作PDF文档

获取 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}");        }

.NET使用DocNET库实现快速高效的操作PDF文档

获取 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);        }

.NET使用DocNET库实现快速高效的操作PDF文档

将 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);        }

.NET使用DocNET库实现快速高效的操作PDF文档

将 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, IEnumerable characters)        {            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);            }        }

.NET使用DocNET库实现快速高效的操作PDF文档

项目源码地址

更多实用功能和特性,欢迎前往项目开源地址查看。
- GitHub开源地址:https://github.com/GowenGit/docnet
- 本文示例源码地址:https://github.com/YSGStudyHards/DotNetExercises/tree/master/DocNETExercises

本文转载于:https://www.jb51.net/aspnet/345834mp4.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注