搜搜吧

查看: 42|回复: 0

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

[复制链接]

托儿所

1万

主题

3万

帖子

8万

积分

Rank: 1

UID
15150
威望
32
搜搜币
45207
在线时间
261 小时
注册时间
2015-10-2
发表于 2021-3-18 10:03:29 | 显示全部楼层 |阅读模式

2bdfeccb79972bfcba03e0f283621ed0.jpg-wh_651x-s_2002535576.jpg

本文转载自微信公众号「码农读书」,作者码农读书。转载本文请联系码农读书公众号。

大家用 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 是否已成功引用到项目中。

655737a6a8c982ef4d269c2dc48b5b81.png-wh_600x-s_3898661709.png

既然是封装了 C++ 的 wkhtmltopdf,肯定要拿到原生的 wkhtmltopdf 工具包, 官方下载地址:https://wkhtmltopdf.org/downloads.html ,也可以在 DinkToPdf 的官方Github:https://github.com/rdvojmoc/DinkToPdf/tree/master/v0.12.4 上下载,然后根据你的需要选择 32bit 还是 64bit 。

db60d4e432ae5f24ecb27c9d2073119a.png-wh_600x-s_1570175756.png

注册 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 = $@"
  •                     
  •                     
  •                     
  •                        This is the header of this document.
  •                     
  •                   
  •                   This is the heading for demonstration purposes only.
  •                   This is a line of text for demonstration purposes only.
  •                   
  •                   
  •                   ";
  •     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();
  •     headerSetting**ontSize = 15;
  •     headerSetting**ontName = "Ariel";
  •     headerSettings.Right = "Page
Powered by www.sosoba.org Copyright © 2013-2021 搜搜吧社区 小黑屋|手机版|Archiver|地图|联系站长|腾讯云代金券|seo优化服务|搜搜吧
广告服务/项目合作/会员购买:QQ 侵权举报邮箱: fuwu-sosoba@qq.com 举报流程必看 搜搜吧建站时间:创建于2013年07月23日
免责声明:本站所有的内容均来自互联网以及第三方作者自由发布,版权归原作者版权所有,搜搜吧不承担任何的法律责任,若有侵权请来信告知,我们立即删除!
版权声明:搜搜吧影视资源均收集自互联网,没有提供影片资源存储和下载,也未参与录制上传,若本站收录的资源涉及您的版权或知识产权或其他利益,我们会立即删除

GMT+8, 2021-4-16 07:43 , Processed in 0.033495 second(s), 9 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表