一個數據驅動的高效 dotnet PDF 開源工具庫

百劍閣 發佈 2022-04-25T23:03:18.995210+00:00

QuestPDF 是一個開源的PDF文檔工具庫。這是優點,也是缺點,因為根據 HTML 和 CSS 樣式生成 PDF 是一個非常高頻的需求,現階段 QuestPDF 對 Html 的支持並不夠好。


簡介

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

關鍵字: