设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间22 现在时间22 缓存数据 关关难过关关过,夜夜难熬夜夜熬。万般皆苦,悲欢自渡,他人难悟。晚安!

关关难过关关过,夜夜难熬夜夜熬。万般皆苦,悲欢自渡,他人难悟。晚安!

查看: 394|回复: 0

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

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
39
主题
31
精华
0
金钱
111
积分
70
注册时间
2023-9-29
最后登录
2025-9-1

发表于 2025-9-1 03:53:52 | 显示全部楼层 |阅读模式

前言

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控制台应用

创建一个名为 

  1. <span>DocNETExercises</span>
复制代码
 的.NET 9 控制台应用:

2.png

3.png

Docnet.Core NuGet包安装

在 NuGet 包管理器中搜索 

  1. <span>Docnet.Core</span>
复制代码
 安装:

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

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看。

  • GitHub开源地址:https://github.com/GowenGit/docnet
  • 本文示例源码地址:https://github.com/YSGStudyHards/DotNetExercises/tree/master/DocNETExercises

到此这篇关于.NET使用DocNET库实现快速高效的操作PDF文档的文章就介绍到这了,更多相关.NET操作PDF内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表