日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
如何在ASP.NETCore5中生成PDF

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

站在用戶的角度思考問題,與客戶深入溝通,找到通州網站設計與通州網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網站制作、網站設計、企業(yè)官網、英文網站、手機端網站、網站推廣、申請域名、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋通州地區(qū)。

大家用 ASP.NET Core 進行項目開發(fā)時,常會有生成 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 上下載,然后根據(jù)你的需要選擇 32bit 還是 64bit 。

注冊 DinkToPdf

要想在 ASP.NET Core 中使用,需要在 ConfigureServices() 方法下將 DinkToPdf 注入到 IOC 容器中,下面的代碼展示了如何去實現(xiàn)。

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

創(chuàng)建 ReportService

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

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

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

 
 
 
 
  1. public byte[] GeneratePdfReport()
  2. {
  3.     var html = $@"
  4.                    
  5.                    
  6.                    
  7.                        This is the header of this document.
  8.                    
  9.                   
  10.                   

    This is the heading for demonstration purposes only.

  11.                   

    This is a line of text for demonstration purposes only.

  12.                   
  13.                   
  14.                   ";
  15.     GlobalSettings globalSettings = new GlobalSettings();
  16.     globalSettings.ColorMode = ColorMode.Color;
  17.     globalSettings.Orientation = Orientation.Portrait;
  18.     globalSettings.PaperSize = PaperKind.A4;
  19.     globalSettings.Margins = new MarginSettings { Top = 25, Bottom = 25 };
  20.     ObjectSettings objectSettings = new ObjectSettings();
  21.     objectSettings.PagesCount = true;
  22.     objectSettings.HtmlContent = html;
  23.     WebSettings webSettings = new WebSettings();
  24.     webSettings.DefaultEncoding = "utf-8";
  25.     HeaderSettings headerSettings = new HeaderSettings();
  26.     headerSettings.FontSize = 15;
  27.     headerSettings.FontName = "Ariel";
  28.     headerSettings.Right = "Page [page] of [toPage]";
  29.     headerSettings.Line = true;
  30.     FooterSettings footerSettings = new FooterSettings();
  31.     footerSettings.FontSize = 12;
  32.     footerSettings.FontName = "Ariel";
  33.     footerSettings.Center = "This is for demonstration purposes only.";
  34.     footerSettings.Line = true;
  35.     objectSettings.HeaderSettings = headerSettings;
  36.     objectSettings.FooterSettings = footerSettings;
  37.     objectSettings.WebSettings = webSettings;
  38.     HtmlToPdfDocument htmlToPdfDocument = new HtmlToPdfDocument()
  39.     {
  40.         GlobalSettings = globalSettings,
  41.         Objects = { objectSettings },
  42.     };
  43.     return _converter.Convert(htmlToPdfDocument);
  44. }

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

 
 
 
 
  1. services.AddSingleton();

創(chuàng)建 ReportController

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

 
 
 
 
  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 就是這么一款非常優(yōu)秀的工具包,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.NETCore5中生成PDF
本文網址:http://m.5511xx.com/article/djjeioi.html