簡介
QuestPDF 是一個開源的PDF文檔工具庫。與其它 PDF 工具庫不同, QuestPDF 的實現不依賴於 HTML 轉換,作者認為從 Html 生成 PDF 不夠可靠和精確,因此實現了一個自由的全面分頁支持的布局引擎,能夠以非常直觀的方式將簡單的頁面元素如邊框、背景、圖像、文本、填充、表格、網格等組合成複雜的文檔結構。
安裝及簡單示例
安裝通過 nuget 即可
// Package Manager
Install-Package QuestPDF
// .NET CLI
dotnet add package QuestPDF
// Package reference in .csproj file
<PackageReference Include="QuestPDF" Version="2022.3.0" />
QuestPDF 非常注重使用的易用性,API 設計非常簡單直觀,入門使用很容易。以下是一個簡單的示例:
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// code in your main method
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Background(Colors.White);
page.DefaultTextStyle(x => x.FontSize(20));
page.Header()
.Text("Hello PDF!")
.SemiBold().FontSize(36).FontColor(Colors.Blue.Medium);
page.Content()
.PaddingVertical(1, Unit.Centimetre)
.Column(x =>
{
x.Spacing(20);
x.Item().Text(Placeholders.LoremIpsum());
x.Item().Image(Placeholders.Image(200, 100));
});
page.Footer()
.AlignCenter()
.Text(x =>
{
x.Span("Page ");
x.CurrentPageNumber();
});
});
})
.GeneratePdf("hello.pdf");
生成的 PDF 頁面如下所示:
數據驅動
QuestPDF 的核心設計思想是數據驅動,建議的 PDF 生成方式將 生成過程分為三個層面。首先是文檔模型,這就是一個普通的類,用以描述生成特定文檔結構所需的數據信息。然後是數據源,比如存儲在資料庫中的發票、訂單和地址數據。有了文檔和數據源,還需要提供一個模板層,用於將數據轉化為指定視覺樣式的 PDF 文檔。怎麼樣,很像 MV** 編程模型吧,同樣的數據源通過不同的模板就可以轉化為不同的 PDF 頁面,非常適合企業根據不同信息快速生成各種各樣的 PDF 報表。因為代碼比較長,文章貼不下,這裡提供一個官方網站提供的發票訂單 PDF 樣例頁面。
當然,也可以生成更加複雜漂亮的頁面。
缺點
正如項目介紹中所說,QuestPDF 布局引擎不依賴於 Html。這是優點,也是缺點,因為根據 HTML 和 CSS 樣式生成 PDF 是一個非常高頻的需求,現階段 QuestPDF 對 Html 的支持並不夠好。其實這應該是可以解決的問題,通過編寫 HTML 元素到 QuestPDF 布局規則的轉換庫。但項目目前還比較年輕,暫時官方或者第三方的功能插件還比較少。總之,筆者認為若需要基於大量企業數據自動生成簡單大方的 PDF 文檔,這個庫非常贊。但若需求是通過 Html 生成 PDF 文件,則暫時還無法勝任,除非你們的團隊能自行編寫相關的功能插件。
Quest PDF 項目地址:https://github.com/QuestPDF/QuestPDF
本文 Gitee 倉庫地址:OpenSourceProjects: 推薦好用的開源項目 - Gitee.com