在C#中生成PDF的步驟詳解
此分步教程展示了如何使用 DotNetBrowser 在 C# 中生成 PDF 文件。
在 .NET 世界中,存在許多 PDF 庫。但我們發(fā)現(xiàn),使用集成瀏覽器生成 PDF 更為簡單。由于 DotNetBrowser 可以在完全脫離屏幕的情況下工作,因此無論是在 Windows 還是 Linux 的服務器上,您都可以使用它。
算法很簡單:
- 加載頁面。
- 填充頁面數(shù)據(jù)。
- 配置打印機。
- 將頁面打印為 PDF。
步驟 1: 創(chuàng)建項目
對于我們的任務,我們不需要用戶界面。因此,我們創(chuàng)建一個控制臺應用程序。
打開終端或命令提示符,導航到所需的目錄,并運行以下命令:
dotnet new console -o PdfGeneration
步驟 2: 集成 DotNetBrowser
將目錄更改為 PdfGeneration
并從 NuGet 添加 DotNetBrowser 包:
# 對于 Windows 平臺: dotnet add package DotNetBrowser # 對于其他平臺: dotnet add package DotNetBrowser.Linux-x64 dotnet add package DotNetBrowser.Linux-arm64 dotnet add package DotNetBrowser.macOS-x64 dotnet add package DotNetBrowser.macOS-arm64
之后, 獲取您的免費許可證以開始使用 DotNetBrowser。
步驟 3: 加載頁面
創(chuàng)建一個簡單的控制臺應用程序,以啟動 DotNetBrowser 并加載帶有模板的頁面。
class Program { private static async Task Main() { var options = new EngineOptions.Builder { RenderingMode = RenderingMode.OffScreen, LicenseKey = "您的許可證密鑰" }.Build(); using var engine = EngineFactory.Create(engineOptions); using var browser = engine.CreateBrowser(); // 頁面是項目中的一個資源。 var pageUrl = Path.GetFullPath("template.html"); await browser.Navigation.LoadUrl(pageUrl); } }
這是一個在常規(guī)瀏覽器中加載的普通頁面。因此,您可以利用任何 JavaScript 庫(如 plotly.js 或 D3.js)、WebGL、SVG 圖形、或者 Chromium 中可用的其他任何技術(shù)。
步驟 4: 填充頁面數(shù)據(jù)
要填充頁面數(shù)據(jù),請使用 DOM API 或執(zhí)行任何 JavaScript 代碼。我們將使用嵌入到頁面中的幾個 JavaScript 函數(shù):
private static void FillInData(IBrowser browser) { var accountNumber = "123-4567"; var name = "李白"; var address = "1640 河濱大道"; var reportingPeriod = "1985 年 10 月 25 日至 11 月 25 日"; browser.MainFrame.ExecuteJavaScript( $"setBillInfo('{accountNumber}', '{name}', '{address}', '{reportingPeriod}')" ); var dayCost = 500; // 美元。 var dayUsage = 1.21; // 吉瓦特。 var nightCost = 312; var nightUsage = 88; browser.MainFrame.ExecuteJavaScript( $"addCharge('Day Tariff', {dayUsage}, {dayCost});" + $"addCharge('Night Tariff', {nightUsage}, {nightCost});" ); }
步驟 5: 配置打印設置
指示瀏覽器自動打印,并配置打印參數(shù):
private static TaskCompletionSource<string> ConfigurePrinting(IBrowser browser) { // 指示瀏覽器自動打印,而不是顯示打印預覽。 browser.RequestPrintHandler = new Handler<RequestPrintParameters, RequestPrintResponse>( p => RequestPrintResponse.Print() ); TaskCompletionSource<string> whenCompleted = new(); // 當瀏覽器打印 HTML 頁面時。 browser.PrintHtmlContentHandler = new Handler<PrintHtmlContentParameters, PrintHtmlContentResponse>( parameters => { // 使用 PDF 打印機。 var printer = parameters.Printers.Pdf; var job = printer.PrintJob; // 為 PDF 文件生成隨機名稱。 var guid = Guid.NewGuid().ToString(); var path = Path.GetFullPath($"{guid}.pdf"); job.Settings.PdfFilePath = path; // 去除邊緣的空白區(qū)域。 job.Settings.PageMargins = PageMargins.None; // 移除瀏覽器默認的頁眉和頁腳。 job.Settings.PrintingHeaderFooterEnabled = false; job.PrintCompleted += (_, _) => whenCompleted.SetResult(path); // 繼續(xù)打印。 return PrintHtmlContentResponse.Print(printer); }); return whenCompleted; }
步驟 6: 生成 PDF 文件
整合以上步驟,開始打印并等待完成:
private static async Task Main() { var engineOptions = new EngineOptions.Builder { RenderingMode = RenderingMode.OffScreen, LicenseKey = "您的許可證密鑰" }.Build(); using var engine = EngineFactory.Create(engineOptions); using var browser = engine.CreateBrowser(); await browser.Navigation.LoadUrl(Path.GetFullPath("template.html")); FillInData(browser); var whenPrintCompleted = ConfigurePrinting(browser); browser.MainFrame.Print(); var resultPath = await whenPrintCompleted.Task; }
結(jié)果
運行程序:
dotnet run
打開生成的 PDF 文件
C# 中由 DotNetBrowser 生成的 PDF 文件
到此這篇關(guān)于在C#中生成PDF的步驟詳解的文章就介紹到這了,更多相關(guān)C#生成PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實現(xiàn)完善Excel不規(guī)則合并單元格數(shù)據(jù)導入的示例代碼
本文主要介紹了C#實現(xiàn)完善Excel不規(guī)則合并單元格數(shù)據(jù)導入的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-02-02