.NET使用DocNET库实现快速高效的操作PDF文档
前言
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);
}
}
项目源码地址
更多项目实用功能和特性欢迎前往项目开源地址查看。
- GitHub开源地址:https://github.com/GowenGit/docnet
- 本文示例源码地址:https://github.com/YSGStudyHards/DotNetExercises/tree/master/DocNETExercises
到此这篇关于.NET使用DocNET库实现快速高效的操作PDF文档的文章就介绍到这了,更多相关.NET操作PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
ASP.NET Core构建OData查询Restful API
这篇文章主要为大家介绍了ASP.NET Core建构OData实体模型实现Restful API查询,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-04-04
asp.net 使用Response.Filter 过滤非法词汇
一般信息发布网站,论坛等均具有实现非法词汇过滤功能,即当用户录入非法词汇时,进行替换,使其无法显示到页面上,针对此种功能,通常采用的时,在读取时,在读到非法词汇后,进行替换。2010-03-03


最新评论