ASP.NET Core 5中如何生成PDF文檔
前言
大傢用 ASP.NET Core 進行項目開發時,常會有生成 PDF 的需求,那如何生成呢?這篇文章我們就來討論如何通過 DinkToPdf 來生成 PDF 文檔,DinkToPdf 封裝瞭 C++ 的 wkhtmltopdf 工具包,前者通過 P/Invoke 的方式來調用後者,而底層的 wkhtmltopdf 利用 Qt WebKit 渲染引擎將 html 轉成 pdf。
安裝 DinkToPdf
要想安裝 DinkToPdf,可以通過 Nuget 可視化界面或者通過 NuGet Package Manager Console 命令行工具輸入以下命令:
Install-Package DinkToPdf
安裝完畢之後可以驗證下 DinkToPdf.dll 是否已成功引用到項目中。
既然是封裝瞭 C++ 的 wkhtmltopdf,肯定要拿到原生的 wkhtmltopdf 工具包, 官方下載地址:https://wkhtmltopdf.org/downloads.html ,也可以在 DinkToPdf 的官方Github:https://github.com/rdvojmoc/DinkToPdf/tree/master/v0.12.4 上下載,然後根據你的需要選擇 32bit 還是 64bit 。
註冊 DinkToPdf
要想在 ASP.NET Core 中使用,需要在 ConfigureServices() 方法下將 DinkToPdf 註入到 IOC 容器中,下面的代碼展示瞭如何去實現。
public void ConfigureServices(IServiceCollection services) { services.AddSingleton(typeof(IConverter),new SynchronizedConverter(new PdfTools())); services.AddControllers(); }
創建 ReportService
基礎配置做好之後,接下來我們來寫生成 PDF 的業務邏輯,創建一個 IReportService 和 ReportService 實現類,代碼如下:
public interface IReportService { public byte[] GeneratePdfReport(); } public class ReportService : IReportService { private readonly IConverter _converter; public ReportService(IConverter converter) { _converter = converter; } public byte[] GeneratePdfReport() { throw new NotImplementedException(); } }
從上面的代碼可以看出,IConverter 實例是通過 構造函數 註入的,接下來可以在 GeneratePdfReport() 方法中構建生成 pdf 的具體業務邏輯。
public byte[] GeneratePdfReport() { var html = $@"<!DOCTYPE html> <html lang=""en""> <head> This is the header of this document. </head> <body> <h1>This is the heading for demonstration purposes only.</h1> <p>This is a line of text for demonstration purposes only.</p> </body> </html>"; GlobalSettings globalSettings = new GlobalSettings(); globalSettings.ColorMode = ColorMode.Color; globalSettings.Orientation = Orientation.Portrait; globalSettings.PaperSize = PaperKind.A4; globalSettings.Margins = new MarginSettings { Top = 25, Bottom = 25 }; ObjectSettings objectSettings = new ObjectSettings(); objectSettings.PagesCount = true; objectSettings.HtmlContent = html; WebSettings webSettings = new WebSettings(); webSettings.DefaultEncoding = "utf-8"; HeaderSettings headerSettings = new HeaderSettings(); headerSettings.FontSize = 15; headerSettings.FontName = "Ariel"; headerSettings.Right = "Page [page ] of [toPage]"; headerSettings.Line = true; FooterSettings footerSettings = new FooterSettings(); footerSettings.FontSize = 12; footerSettings.FontName = "Ariel"; footerSettings.Center = "This is for demonstration purposes only."; footerSettings.Line = true; objectSettings.HeaderSettings = headerSettings; objectSettings.FooterSettings = footerSettings; objectSettings.WebSettings = webSettings; HtmlToPdfDocument htmlToPdfDocument = new HtmlToPdfDocument() { GlobalSettings = globalSettings, Objects = { objectSettings }, }; return _converter.Convert(htmlToPdfDocument); }
然後再將 IReportService 和 ReportService 註入到 IOC 容器中,如下代碼所示:
services.AddSingleton<IReportService, ReportService>();
創建 ReportController
GeneratePdfReport() 方法的業務邏輯構建好之後,現在可以將 IReportService 實例註入到 ReportController 中來最終渲染 pdf,下面的代碼展示瞭如何去實現。
[Route("api/[controller]")] [ApiController] public class ReportController : ControllerBase { private readonly IReportService _reportService; public ReportController(IReportService reportService) { _reportService = reportService; } [HttpGet] public IActionResult Get() { var pdfFile = _reportService.GeneratePdfReport(); return File(pdfFile,"application/octet-stream", "SimplePdf.pdf"); } }
在 ASP.NET Core 中並沒有內置對 pdf 的支持,所以有這方面的需求隻能借助於第三方框架,而 DinkToPdf 就是這麼一款非常優秀的工具包,DinkToPdf 是一款用 .NET 語言編寫的用於包裝 C++ 的 wkhtmltopdf 的工具包,它可以非常方便的將 Html 轉成 PDF ,關於更多 DinkToPdf 可參考 Github:https://github.com/rdvojmoc/DinkToPdf
譯文鏈接:https://www.infoworld.com/article/3605276/how-to-create-pdf-documents-in-aspnet-core-5.html
總結
到此這篇關於ASP.NET Core 5中如何生成PDF文檔的文章就介紹到這瞭,更多相關ASP.NET Core5生成PDF內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python3實現網頁內容轉換成PDF文檔和圖片
- python實現csdn全部博文下載並轉PDF
- Python自動化辦公之Word轉PDF的實現
- 解決ASP.NET Core中使用漏桶算法限流的問題
- ASP.NET Core中使用滑動窗口限流的問題及場景分析