写点什么

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

作者:追逐时光者
  • 2025-10-08
    广东
  • 本文字数:2795 字

    阅读完需:约 9 分钟

前言

PDF 文档,作为日常工作中不可或缺的文档格式,广泛应用于各类场景。今天我们来讲讲在 .NET 中使用 DocNET 库快速高效的操作 PDF 文档。

项目介绍

DocNET 是一个基于 .NET 开源(MIT license)、跨平台(支持 Windows、Linux 和 macOS 平台)的旨在提供快速 PDF 编辑和数据提取的操作库。它是基于 Chromium 所使用的 PDFium C++ 库开发的 .NET Standard 2.0 封装库。

项目特性

  • PDF 提取功能:支持 PDF 版本、页数、页面宽度、页面高度、页面文本、字符字体大小等相关 PDF 信息提取。

  • PDF 编辑功能: 支持分割 PDF 文档、合并 PDF 文档、解锁 PDF 文档。

  • 支持渲染页面为图像、JPEG 图片转换为 PDF 文件等等。

项目源代码

创建 DocNETExercises 控制台应用

创建一个名为 DocNETExercises 的.NET 9 控制台应用:


Docnet.Core NuGet 包安装

在 NuGet 包管理器中搜索 Docnet.Core 安装:

获取 PDF 文件页码和版本

        /// <summary>        /// 获取 PDF 文件页码和版本        /// </summary>        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 文件的文本内容

        /// <summary>        /// 获取 PDF 文件的文本内容        /// </summary>        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 文件

        /// <summary>        /// 将 JPEG 图片转换为 PDF 文件        /// </summary>        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 文件转换为图片

        /// <summary>        /// 将 PDF 文件转换为图片        /// </summary>        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.Save(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<Character> 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);            }        }
复制代码


项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个 Star 支持💖。

优秀项目和框架精选

该项目已收录到 C#/.NET/.NET Core 优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解 C#、.NET 和.NET Core 领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交 PR 推荐或自荐(让优秀的项目和框架不被埋没🤞)。

发布于: 刚刚阅读数: 4
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
.NET 使用 DocNET 库快速高效的操作 PDF 文档_C#_追逐时光者_InfoQ写作社区