從煙霧到土壤:我們在泰北生物炭項目的最新進展
大多數開發者第一次需要在內部應用程式中新增PDF報告時,會花掉一天的時間。
他們嘗試使用瀏覽器的列印對話框。 輸出看起來是錯誤的。 他們嘗試使用使用者端的PDF程式庫。 佈局崩潰了。 他們手動捲動一些使用定位文字和絕對座標的東西。 它適用於一份報告,卻在下一份報告中崩潰。 當他們發佈這個功能時,他們已經在這個應該只需二十分鐘解決的問題上花費了八個小時。
Jeff Fritz向一房間的初學者展示了如何在二十分鐘內完成這件事。
工作坊
如果您不認識Jeff Fritz:他是一位Microsoft MVP,Microsoft的首席專案經理,也是長期運行的Fritz and Friends串流的主持人。 他為開發者初入.NET之旅的開發者們舉辦免費的工作坊,幾週前,他舉辦了一場極具挑戰性的工作坊:一場五小時的實況構建,涵蓋HTML、CSS、C#、Blazor、ASP.NET和.NET Aspire,整個小組從頭開始構建一個可運行的收藏跟蹤應用程式。
四個小時後,應用程式需要PDF報告。 使用者應該能點擊按鈕獲取其收藏的乾淨的、可下載的PDF。 真實世界的內部工具。 這是每位產品經理最終會要求的功能,也是每位開發者最終必須發佈的功能。
Jeff教的模式是大多數團隊應該使用的,值得深入研究,因為一旦您看到它,您會停止尋找錯誤的工具。

五步驟模式
這就是它的輪廓。 它看似簡短。
為報告專門設計一個Razor頁面。 Jeff在專案的Pages目錄內建立Report.razor。 小選擇,大回報,將報告作為獨立的頁面意味著它可以獨立於其他UI部分進行樣式設計、重新生成和測試。 報告成為應用程式的一級部分,不是一個附加在其他視圖上的漏洞。
注入資料上下文。 Entity Framework Core CollectionContext工廠通過依賴注入進入,與應用程式中每個其他資料提取點一樣。 沒有特殊的模式,沒有變通辦法,沒有單獨的資料路徑專門為報告服務。 報告使用與應用程式其餘部分相同的資料,相同的方式。
將報告渲染為HTML。 這一步驟使一個好的模式與一個脆弱的模式區分開來。 Jeff不會選擇PDF特定的佈局語言。 他將報告寫成HTML,使用了他整個下午一直使用的標記,並讓現有的樣式發揮效果。 標題、表格、部分,全都使用HTML。 最終輸出是PDF的事實在後面才顯現。
使用一行HTML轉PDF。這就是IronPDF值得的地方。 ChromePdfRenderer使用Chrome引擎,在底層將HTML字串轉換為真正的、正確渲染的PDF。 在瀏覽器中看起來正確的CSS在PDF中也看起來正確。 不需要學習單獨的樣式層,沒有渲染異常需要除錯。
- 將其返回為檔案。當使用者點擊按鈕時,瀏覽器清晰地下載PDF。 完成。 功能已發佈。

這就是整個模式。 五個步驟,二十分鐘的直播時間,以及一項可以在生產中支持的功能。
為什麼這個有效
這個模式是正確的更深層原因是耐用性,但表面理由是每一步都對應於開發者已經會的東西。
撰寫報告佈局? 那就是HTML和CSS,與其他頁面一樣。 查詢資料? 相同的EF Core模式。 將頁面連接到應用程式?相同的Razor頁面,相同的DI。 唯一真正的新步驟是轉換為PDF,而這只有一行。
將此與其他選擇進行比較。 當使用者使用其他瀏覽器、不同比例或意外的列印機設置時,列印對話框方法會崩潰。 使用者端PDF程式庫強迫開發者學習一種全新的佈局語言。 手工捲動的基於座標的佈局適用於一份報告,卻在第二份報告中崩潰。 這些方法都無法在與真正的產品接觸後生存下來。
伺服器端HTML轉PDF模式能夠生存。 輸出一致、可預測且集中,因為渲染在一個地方在一組規則下發生,相同的輸入每次都會產生相同的PDF,在每個使用者端上。 對於內部工具、面向客戶的報告、審計跟蹤文件,甚至任何輸出一致性確實重要的地方,這是可以支持的模式。
本次工作坊教學它是因為沒有時間用其他方式教。
在您自己的專案中試試看

Jeff使用的轉換步驟程式庫IronPDF,提供免費試用,可以使用30天試用金鑰。 使用商務電子郵件註冊,金鑰將會發送到您的收件箱,您可以在下午結束前在您自己的專案中建立Jeff Fritz教學的確切模式。 試用期間沒有浮水印,完整功能存取,所有API都可用。
如果您之前有因為上次嘗試增加PDF報告而耗時一天而拖延的話,這個是只需二十分鐘的專案版本。
觀看完整的工作坊
Jeff的完整會話在他的YouTube頻道上。 PDF報告段落在4:56:48開始,但之前的模組也值得您花時間學習,因為它們是現代.NET堆疊的清晰上路,而且Jeff的教學真的很棒。
