.NET 工具庫高效生成 PDF 文件

小码编匠發表於2024-09-26

前言

QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文件。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、匯出檔案等。

專案介紹

QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文件的方式。

QuestPDF 的核心思想在於使用宣告式的 C# 程式碼來描述 PDF 文件的結構和樣式。

這種方法與我們使用 HTML 和 CSS 構建網頁的方式非常相似,我們能夠迅速上手,並輕鬆建立複雜的 PDF 文件。

.NET 工具庫高效生成 PDF 文件

專案特點

  • 簡潔強大的 API:QuestPDF 的 API 設計直觀易用,幾乎無需查閱文件即可上手。透過一系列流暢的方法鏈,只需少量程式碼即可描述複雜的文件結構。
  • 高效能:QuestPDF 在效能方面表現出色,能夠快速生成大型文件。即使面對包含數千頁的複雜報表,也能輕鬆應對,這得益於其高效的內部演算法和最佳化的架構。
  • 跨平臺支援:應用執行在 Windows、macOS 還是 Linux 上,QuestPDF 都能完美執行。跨平臺特性使其在構建雲原生應用時尤為突出。
  • 零依賴:不同於其他 PDF 庫,QuestPDF 不需要任何外部依賴。無需安裝額外字型或使用第三方庫,從而大大簡化了部署和維護流程。
  • 豐富的元素支援:QuestPDF 支援多種文件元素,包括文字、影像、表格和條形碼等。它甚至支援複雜的圖表繪製,這樣的文件更具表現力。
  • 動態內容與智慧分頁:QuestPDF 可以處理動態生成的內容,並自動解決分頁問題。不再需要擔心內容溢位或分頁不當的問題。
  • 強大的除錯工具:QuestPDF 提供了強大的除錯工具,可以快速定位並解決問題。還能視覺化地檢視文件結構,輕鬆找出佈局錯誤。

相比傳統 PDF 生成庫,QuestPDF 簡化了 PDF 生成的過程,提供了更好的開發體驗和更高的生產力。

專案使用

安裝QuestPDF Nuget包

搜尋 QuestPDF 包進行安裝,具體如下圖所示

.NET 工具庫高效生成 PDF 文件

專案示例

建立一個WebAPI專案,利用QuestPDF快速生成PDF檔案。

1、需要在Program新增配置資訊

#region QuestPDF設定
// 1、請確保您有資格使用社群許可證,不設定的話會報異常。
Settings.License = LicenseType.Community;
// 2、禁用QuestPDF庫中文字字元可用性的檢查
Settings.CheckIfAllTextGlyphsAreAvailable = false;
#endregion

預設情況下,使用 QuestPDF 生成 PDF 文件時,它會檢查所使用的字型是否支援文字中的所有字元,並在發現不能顯示的字元時輸出一條警告訊息。這個選項可以確保文字中的所有字元都能正確地顯示在生成的 PDF 檔案中。

2、生成文件控制器程式碼

/// <summary>
/// 建立PDF檔案
/// </summary>
/// <returns></returns>
[HttpGet(Name = "GeneratePdf")]
public IActionResult GeneratePdf()
{
    //建立文件
    var document = CreateDocument();
​
    // 生成PDF檔案
    var pdf = document.GeneratePdf();
​
    // 返回檔案流
    return File(pdf, "application/pdf", "QuestPDFDemo.pdf");
}

3、執行效果

呼叫介面生成PDF文件,下載就可以預覽,方便快捷,編寫方便,大家可以去試試。

.NET 工具庫高效生成 PDF 文件

.NET 工具庫高效生成 PDF 文件

部分示例

文字元素

文字元素用於繪製帶有預設或自定義樣式的文字。文字總是儘可能佔用最少的空間。

如果文字字串很長,該元素可能會佔據整個寬度並換行到下一行。元素支援分頁。

對於大多數不需要複雜格式化的情況,簡化版的文字元件就足夠了,如下所示:

.Text("Sample text")
.Text("Red big text").FontColor("#F00").FontSize(24)

當希望在文字字串中間更改樣式、插入頁碼或包含自定義元件時,請使用"文字塊"方法,如下所示:

.Text(text =>
{
    text.Span("This is a normal text, followed by some ");
    text.Span("underlined text.").Underline();
});

靜態影像

元素可用於在文件內放置影像。預設情況下,Image 會保持影像的縱橫比。影像被載入到一個 SkiaSharp.Image 物件中。

請注意,所有的限制都是繼承自 SkiaSharp 的。例如,可用的影像格式可能會因平臺而異。

可以使用任何常見的光柵格式的影像,例如 JPG、PNG、BMP 等。

在 C# 中,可以透過以下幾種方式提供影像:

byte[] imageData = System.IO.File.ReadAllBytes("path/to/logo.png");
container.Image(imageData);
​
//檔名
container.Image("path/myFile.png");
​
//檔案流
using var stream = new System.IO.FileStream("logo.png", System.IO.FileMode.Open);
container.Image(stream);

示例展示如何在 QuestPDF 中載入並使用影像,可以根據實際需求選擇最合適的載入方式。

還有很多示例,可以檢視文件,進行學習和使用。透過官方文件,可以找到更多關於如何使用 QuestPDF 的詳細教程和例項。

文件中不僅包含了基本的用法說明,還提供了高階功能的演示。

.NET 工具庫高效生成 PDF 文件

專案地址

  • GitHub:https://github.com/QuestPDF/QuestPDF
  • 文件:https://www.questpdf.com/quick-start.html

總結

希望本文能為朋友們在生成PDF方面開發帶來幫助。歡迎大家在評論區留言討論,分享您的經驗和建議。

最後

如果你覺得這篇文章對你有幫助,不妨點個贊支援一下!你的支援是我繼續分享知識的動力。如果有任何疑問或需要進一步的幫助,歡迎隨時留言。

也可以加入微信公眾號[DotNet技術匠] 社群,與其他熱愛技術的同行一起交流心得,共同成長!優秀是一種習慣,歡迎大家留言學習!

相關文章