.NET 使(shi)用 DocNET 庫快速高效的(de)操作(zuo) PDF 文檔
前言
PDF 文檔,作為(wei)日常工(gong)作中(zhong)不可(ke)或(huo)缺的(de)文檔格式,廣泛應用(yong)于各(ge)類場景。今(jin)天我們來講(jiang)(jiang)講(jiang)(jiang)在 .NET 中(zhong)使用(yong) DocNET 庫快速高效的(de)操(cao)作 PDF 文檔。
項(xiang)目介紹
DocNET 是一(yi)個基(ji)于 .NET 開源(yuan)(MIT license)、跨(kua)平(ping)臺(支持Windows、Linux和macOS平(ping)臺)的(de)(de)旨(zhi)在(zai)提供快速 PDF 編(bian)輯和數據(ju)提取的(de)(de)操(cao)作(zuo)庫(ku)。它是基(ji)于 Chromium 所使用(yong)的(de)(de) PDFium C++ 庫(ku)開發的(de)(de) .NET Standard 2.0 封裝庫(ku)。
項目特性(xing)
- PDF 提(ti)(ti)取(qu)功能:支持(chi) PDF 版本、頁(ye)數、頁(ye)面(mian)寬度、頁(ye)面(mian)高度、頁(ye)面(mian)文本、字符(fu)字體大小等相關PDF信息提(ti)(ti)取(qu)。
- PDF 編輯功能(neng): 支(zhi)持分割 PDF 文檔(dang)(dang)(dang)、合并 PDF 文檔(dang)(dang)(dang)、解鎖 PDF 文檔(dang)(dang)(dang)。
- 支持渲染頁面為圖(tu)像、JPEG 圖(tu)片轉換為 PDF 文件等(deng)等(deng)。
項目源(yuan)代碼(ma)

創建DocNETExercises控(kong)制臺應(ying)用
創建一個名為 DocNETExercises 的.NET 9 控制臺應(ying)用:


Docnet.Core NuGet包(bao)安裝
在 NuGet 包管理器中搜索 Docnet.Core 安裝:

獲取 PDF 文(wen)件頁碼和(he)版(ban)本(ben)
/// <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}");
}

獲(huo)取 PDF 文(wen)件的文(wen)本內容
/// <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 圖(tu)片轉換(huan)為 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 文件轉換為圖(tu)片
/// <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);
}
}

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