.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);
}
}

項目源碼地址
更多項目實用功能和特性歡迎前往項目開源地址查看??,別忘了給項目一個Star支持??。
- GitHub開源地址:https://github.com/GowenGit/docnet
- 本文示例源碼地址:https://github.com/YSGStudyHards/DotNetExercises/tree/master/DocNETExercises
優秀項目和框架精選
該項目已收錄到C#/.NET/.NET Core優秀項目和框架精選中,關注優秀項目和框架精選能讓你及時了解C#、.NET和.NET Core領域的最新動態和最佳實踐,提高開發工作效率和質量。坑已挖,歡迎大家踴躍提交PR推薦或自薦(讓優秀的項目和框架不被埋沒??)。
- GitHub開源地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
- Gitee開源地址:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
DotNetGuide技術社區
- DotNetGuide技術社區是一個面向.NET開發者的開源技術社區,旨在為開發者們提供全面的C#/.NET/.NET Core相關學習資料、技術分享和咨詢、項目框架推薦、求職和招聘資訊、以及解決問題的平臺。
- 在DotNetGuide技術社區中,開發者們可以分享自己的技術文章、項目經驗、學習心得、遇到的疑難技術問題以及解決方案,并且還有機會結識志同道合的開發者。
- 我們致力于構建一個積極向上、和諧友善的.NET技術交流平臺。無論您是初學者還是有豐富經驗的開發者,我們都希望能為您提供更多的價值和成長機會。
作者名稱:追逐時光者
作者簡介:一個熱愛編程、善于分享、喜歡學習、探索、嘗試新事物和新技術的全棧軟件工程師。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。如果該篇文章對您有幫助的話,可以點一下右下角的【♥推薦♥】,希望能夠持續的為大家帶來好的技術文章,文中可能存在描述不正確的地方,歡迎指正或補充,不勝感激。

浙公網安備 33010602011771號