ASP.NET Core 5中如何生成PDF文檔
前言
大家用 ASP.NET Core 進(jìn)行項(xiàng)目開發(fā)時(shí),常會(huì)有生成 PDF 的需求,那如何生成呢?這篇文章我們就來討論如何通過 DinkToPdf 來生成 PDF 文檔,DinkToPdf 封裝了 C++ 的 wkhtmltopdf 工具包,前者通過 P/Invoke 的方式來調(diào)用后者,而底層的 wkhtmltopdf 利用 Qt WebKit 渲染引擎將 html 轉(zhuǎn)成 pdf。
安裝 DinkToPdf
要想安裝 DinkToPdf,可以通過 Nuget 可視化界面或者通過 NuGet Package Manager Console 命令行工具輸入以下命令:
Install-Package DinkToPdf
安裝完畢之后可以驗(yàn)證下 DinkToPdf.dll 是否已成功引用到項(xiàng)目中。

既然是封裝了 C++ 的 wkhtmltopdf,肯定要拿到原生的 wkhtmltopdf 工具包, 官方下載地址:https://wkhtmltopdf.org/downloads.html ,也可以在 DinkToPdf 的官方Github:https://github.com/rdvojmoc/DinkToPdf/tree/master/v0.12.4 上下載,然后根據(jù)你的需要選擇 32bit 還是 64bit 。

注冊(cè) DinkToPdf
要想在 ASP.NET Core 中使用,需要在 ConfigureServices() 方法下將 DinkToPdf 注入到 IOC 容器中,下面的代碼展示了如何去實(shí)現(xiàn)。
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(typeof(IConverter),new SynchronizedConverter(new PdfTools()));
services.AddControllers();
}
創(chuàng)建 ReportService
基礎(chǔ)配置做好之后,接下來我們來寫生成 PDF 的業(yè)務(wù)邏輯,創(chuàng)建一個(gè) IReportService 和 ReportService 實(shí)現(xiàn)類,代碼如下:
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 實(shí)例是通過 構(gòu)造函數(shù) 注入的,接下來可以在 GeneratePdfReport() 方法中構(gòu)建生成 pdf 的具體業(yè)務(wù)邏輯。
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>();
創(chuàng)建 ReportController
GeneratePdfReport() 方法的業(yè)務(wù)邏輯構(gòu)建好之后,現(xiàn)在可以將 IReportService 實(shí)例注入到 ReportController 中來最終渲染 pdf,下面的代碼展示了如何去實(shí)現(xiàn)。
[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 中并沒有內(nèi)置對(duì) pdf 的支持,所以有這方面的需求只能借助于第三方框架,而 DinkToPdf 就是這么一款非常優(yōu)秀的工具包,DinkToPdf 是一款用 .NET 語言編寫的用于包裝 C++ 的 wkhtmltopdf 的工具包,它可以非常方便的將 Html 轉(zhuǎn)成 PDF ,關(guān)于更多 DinkToPdf 可參考 Github:https://github.com/rdvojmoc/DinkToPdf
譯文鏈接:https://www.infoworld.com/article/3605276/how-to-create-pdf-documents-in-aspnet-core-5.html
總結(jié)
到此這篇關(guān)于ASP.NET Core 5中如何生成PDF文檔的文章就介紹到這了,更多相關(guān)ASP.NET Core5生成PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- ASP.NET?Core使用EF創(chuàng)建模型(包含屬性、排除屬性、主鍵和生成值)
- ASP.NET Core自動(dòng)生成小寫破折號(hào)路由的實(shí)現(xiàn)方法
- Asp.Net Core使用swagger生成api文檔的完整步驟
- 詳解ASP.NET Core 2.0 路由引擎之網(wǎng)址生成(譯)
- Asp.NetCore1.1版本去掉project.json后如何打包生成跨平臺(tái)包
- Asp.net core WebApi 使用Swagger生成幫助頁實(shí)例
- 基于ASP.NET Core數(shù)據(jù)保護(hù)生成驗(yàn)證token示例
- asp.net core實(shí)現(xiàn)在線生成多個(gè)文件將多個(gè)文件打包為zip返回的操作
相關(guān)文章
.NET6創(chuàng)建Windows服務(wù)的實(shí)現(xiàn)步驟
本文主要介紹了.NET6創(chuàng)建Windows服務(wù)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
asp.net漢字轉(zhuǎn)拼音和獲取漢字首字母的代碼
在網(wǎng)上找到的好東西。以后asp.net下漢字轉(zhuǎn)成拼音就方便多了2008-07-07
asp.net?core?configuration配置讀取的實(shí)現(xiàn)
本文主要介紹了asp.net?core?configuration配置讀取,configuration可以從命令行、環(huán)境變量、配置文件讀取配置,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
ASP.NET Global.asax應(yīng)用程序文件簡(jiǎn)介
Global.asax 文件,有時(shí)候叫做 ASP.NET 應(yīng)用程序文件,提供了一種在一個(gè)中心位置響應(yīng)應(yīng)用程序級(jí)或模塊級(jí)事件的方法。2009-03-03
關(guān)于HttpHandler與HttpModule的理解和應(yīng)用方法
本篇文章小編將為大家介紹,關(guān)于HttpHandler與HttpModule的理解和應(yīng)用方法,有需要的朋友可以參考一下2013-04-04

