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

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

勺缓曜 13 小时前
前言

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

项目源码地址


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