成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 ASP.NET Core 5 中生成 PDF

開發 后端
大家用 ASP.NET Core 進行項目開發時,常會有生成 PDF 的需求,那如何生成呢?這篇文章我們就來討論如何通過 DinkToPdf 來生成 PDF 文檔,DinkToPdf 封裝了 C++ 的 wkhtmltopdf 工具包,前者通過 P/Invoke 的方式來調用后者,而底層的 wkhtmltopdf 利用 Qt WebKit 渲染引擎將 html 轉成 pdf。

[[388253]]

本文轉載自微信公眾號「碼農讀書」,作者碼農讀書。轉載本文請聯系碼農讀書公眾號。

大家用 ASP.NET Core 進行項目開發時,常會有生成 PDF 的需求,那如何生成呢?這篇文章我們就來討論如何通過 DinkToPdf 來生成 PDF 文檔,DinkToPdf 封裝了 C++ 的 wkhtmltopdf 工具包,前者通過 P/Invoke 的方式來調用后者,而底層的 wkhtmltopdf 利用 Qt WebKit 渲染引擎將 html 轉成 pdf。

安裝 DinkToPdf

要想安裝 DinkToPdf,可以通過 Nuget 可視化界面或者通過 NuGet Package Manager Console 命令行工具輸入以下命令:

  1. 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 容器中,下面的代碼展示了如何去實現。

  1. public void ConfigureServices(IServiceCollection services) 
  2.         { 
  3.             services.AddSingleton(typeof(IConverter),new SynchronizedConverter(new PdfTools())); 
  4.  
  5.             services.AddControllers(); 
  6.         } 

創建 ReportService

基礎配置做好之后,接下來我們來寫生成 PDF 的業務邏輯,創建一個 IReportService 和 ReportService 實現類,代碼如下:

  1. public interface IReportService 
  2.     { 
  3.         public byte[] GeneratePdfReport(); 
  4.     } 
  5.  
  6.     public class ReportService : IReportService 
  7.     { 
  8.         private readonly IConverter _converter; 
  9.         public ReportService(IConverter converter) 
  10.         { 
  11.             _converter = converter; 
  12.         } 
  13.         public byte[] GeneratePdfReport() 
  14.         { 
  15.             throw new NotImplementedException(); 
  16.         } 
  17.     } 

從上面的代碼可以看出,IConverter 實例是通過 構造函數 注入的,接下來可以在 GeneratePdfReport() 方法中構建生成 pdf 的具體業務邏輯。

  1. public byte[] GeneratePdfReport() 
  2.     var html = $@" 
  3.                    <!DOCTYPE html> 
  4.                    <html lang=""en""
  5.                    <head> 
  6.                        This is the header of this document. 
  7.                    </head> 
  8.                   <body> 
  9.                   <h1>This is the heading for demonstration purposes only.</h1> 
  10.                   <p>This is a line of text for demonstration purposes only.</p> 
  11.                   </body> 
  12.                   </html> 
  13.                   "; 
  14.     GlobalSettings globalSettings = new GlobalSettings(); 
  15.     globalSettings.ColorMode = ColorMode.Color; 
  16.     globalSettings.Orientation = Orientation.Portrait; 
  17.     globalSettings.PaperSize = PaperKind.A4; 
  18.     globalSettings.Margins = new MarginSettings { Top = 25, Bottom = 25 }; 
  19.     ObjectSettings objectSettings = new ObjectSettings(); 
  20.     objectSettings.PagesCount = true
  21.     objectSettings.HtmlContent = html; 
  22.     WebSettings webSettings = new WebSettings(); 
  23.     webSettings.DefaultEncoding = "utf-8"
  24.     HeaderSettings headerSettings = new HeaderSettings(); 
  25.     headerSettings.FontSize = 15; 
  26.     headerSettings.FontName = "Ariel"
  27.     headerSettings.Right = "Page [page] of [toPage]"
  28.     headerSettings.Line = true
  29.     FooterSettings footerSettings = new FooterSettings(); 
  30.     footerSettings.FontSize = 12; 
  31.     footerSettings.FontName = "Ariel"
  32.     footerSettings.Center = "This is for demonstration purposes only."
  33.     footerSettings.Line = true
  34.     objectSettings.HeaderSettings = headerSettings; 
  35.     objectSettings.FooterSettings = footerSettings; 
  36.     objectSettings.WebSettings = webSettings; 
  37.     HtmlToPdfDocument htmlToPdfDocument = new HtmlToPdfDocument() 
  38.     { 
  39.         GlobalSettings = globalSettings, 
  40.         Objects = { objectSettings }, 
  41.     }; 
  42.     return _converter.Convert(htmlToPdfDocument); 

然后再將 IReportService 和 ReportService 注入到 IOC 容器中,如下代碼所示:

  1. services.AddSingleton<IReportService, ReportService>(); 

創建 ReportController

GeneratePdfReport() 方法的業務邏輯構建好之后,現在可以將 IReportService 實例注入到 ReportController 中來最終渲染 pdf,下面的代碼展示了如何去實現。

  1. [Route("api/[controller]")] 
  2.  [ApiController] 
  3.  public class ReportController : ControllerBase 
  4.  { 
  5.      private readonly IReportService _reportService; 
  6.      public ReportController(IReportService reportService) 
  7.      { 
  8.          _reportService = reportService; 
  9.      } 
  10.      [HttpGet] 
  11.      public IActionResult Get() 
  12.      { 
  13.          var pdfFile = _reportService.GeneratePdfReport(); 
  14.          return File(pdfFile,"application/octet-stream""SimplePdf.pdf"); 
  15.      } 
  16.  } 

在 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

 

責任編輯:武曉燕 來源: 碼農讀書
相關推薦

2021-03-17 09:45:31

LazyCacheWindows

2021-02-02 16:19:08

Serilog日志框架

2021-11-01 14:52:38

ElasticSear索引SQL

2021-02-06 21:40:13

SignalR通訊TypeScript

2024-11-27 08:34:53

ASPZIP壓縮包

2021-03-10 09:40:43

LamarASP容器

2021-02-28 20:56:37

NCache緩存框架

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-31 22:56:50

FromServiceASP

2021-01-07 07:39:07

工具接口 Swagger

2021-03-03 22:37:16

MediatR中介者模式

2021-02-07 17:29:04

監視文件接口

2021-03-08 07:32:05

Actionweb框架

2021-01-15 05:38:28

ASPHttp端口

2021-01-13 07:33:41

API數據安全

2017-04-21 12:03:46

MacASP.NET Cor程序

2021-06-22 16:59:56

微軟.NETC# 軟件開發

2021-01-26 14:57:00

中間件應用模塊化

2021-04-12 07:03:10

輕量級模塊化框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频一区二区三区在线观看 | 欧美中文字幕在线观看 | 国产激情在线 | 精品国产乱码一区二区三 | 手机在线一区二区三区 | 日韩精品免费在线观看 | 啪啪免费网站 | 一区二区av| 国内自拍偷拍视频 | 欧美激情一区二区 | 亚洲激情综合网 | 成人国产一区二区三区精品麻豆 | 日韩一区二区免费视频 | 成人在线| 亚洲毛片在线观看 | 欧美一级欧美一级在线播放 | 人人擦人人| 麻豆视频国产在线观看 | 欧美日韩国产高清视频 | 亚洲国产一区二区三区 | 欧美日韩综合精品 | 亚洲大片在线观看 | 81精品国产乱码久久久久久 | 国产精品99久久久久久动医院 | 人人干人人干人人 | 国产精品激情小视频 | 成人免费网站视频 | 成人亚洲一区 | 国内精品久久久久久久影视简单 | 伊人免费观看视频 | 久久国产精品网站 | 日韩激情一区 | 国产视频精品视频 | 在线成人 | 一区二区三区四区免费在线观看 | 久久久久一区二区 | 蜜桃一区 | 国产在线中文 | 久久久久久av | 国产精品a级 | 久草免费在线视频 |