找回密码
 立即注册
首页 业界区 业界 .NET 使用 DocNET 库快速高效的操作 PDF 文档 ...

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

勺缓曜 2025-7-21 06:31:25
前言

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 文件等等。
项目源代码

1.png

创建DocNETExercises控制台应用

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

3.png

Docnet.Core NuGet包安装

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

获取 PDF 文件页码和版本
  1.         /// <summary>
  2.         /// 获取 PDF 文件页码和版本
  3.         /// </summary>
  4.         public static void GetPDFPageCountAndVersion()
  5.         {
  6.             using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920));
  7.             var getPageCount = docReader.GetPageCount();
  8.             var getPdfVersion = docReader.GetPdfVersion();
  9.             Console.WriteLine($"PageCount:{getPageCount},PdfVersion:{getPdfVersion}");
  10.         }
复制代码
5.png

获取 PDF 文件的文本内容
  1.         /// <summary>
  2.         /// 获取 PDF 文件的文本内容
  3.         /// </summary>
  4.         public static void GetPDFText()
  5.         {
  6.             using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920));
  7.             using var pageReader = docReader.GetPageReader(0); //注意pageIndex从0开始

  8.             // 获取指定页面的文本(自动处理编码)
  9.             string pageText = pageReader.GetText();

  10.             Console.WriteLine(pageText);
  11.         }
复制代码
6.png

将 JPEG 图片转换为 PDF 文件
  1.         /// <summary>
  2.         /// 将 JPEG 图片转换为 PDF 文件
  3.         /// </summary>
  4.         public static void JPEGImageConvertToPDF()
  5.         {
  6.             var file = new JpegImage
  7.             {
  8.                 Bytes = File.ReadAllBytes("Assets/image1.jpeg"),
  9.                 Width = 580,
  10.                 Height = 387
  11.             };

  12.             var bytes = _docNetInstance.JpegToPdf(new[] { file });

  13.             File.WriteAllBytes("Assets/output_file.pdf", bytes);
  14.         }
复制代码
7.png

将 PDF 文件转换为图片
  1.         /// <summary>
  2.         /// 将 PDF 文件转换为图片
  3.         /// </summary>
  4.         public static void PDFConvertToImage()
  5.         {
  6.             using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920));
  7.             //指定第一页
  8.             using var pageReader = docReader.GetPageReader(0);

  9.             var rawBytes = pageReader.GetImage();
  10.             var width = pageReader.GetPageWidth();
  11.             var height = pageReader.GetPageHeight();
  12.             var characters = pageReader.GetCharacters();

  13.             using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb);

  14.             AddBytes(bmp, rawBytes);
  15.             DrawRectangles(bmp, characters);

  16.             using var stream = new MemoryStream();

  17.             bmp.Save(stream, ImageFormat.Png);

  18.             File.WriteAllBytes("Assets/output_image.png", stream.ToArray());
  19.         }

  20.         private static void AddBytes(Bitmap bmp, byte[] rawBytes)
  21.         {
  22.             var rect = new Rectangle(0, 0, bmp.Width, bmp.Height);

  23.             var bmpData = bmp.LockBits(rect, ImageLockMode.WriteOnly, bmp.PixelFormat);
  24.             var pNative = bmpData.Scan0;

  25.             Marshal.Copy(rawBytes, 0, pNative, rawBytes.Length);
  26.             bmp.UnlockBits(bmpData);
  27.         }

  28.         private static void DrawRectangles(Bitmap bmp, IEnumerable<Character> characters)
  29.         {
  30.             var pen = new Pen(Color.Red);

  31.             using var graphics = Graphics.FromImage(bmp);

  32.             foreach (var c in characters)
  33.             {
  34.                 var rect = new Rectangle(c.Box.Left, c.Box.Top, c.Box.Right - c.Box.Left, c.Box.Bottom - c.Box.Top);
  35.                 graphics.DrawRectangle(pen, rect);
  36.             }
  37.         }
复制代码
8.png

项目源码地址


更多项目实用功能和特性欢迎前往项目开源地址查看
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册