华域联盟 .Net ASP.NET Core 5中如何生成PDF文档

ASP.NET Core 5中如何生成PDF文档

ASP.NET Core 5中如何生成PDF文档
 更新时间:2021年03月20日 12:47:15   作者:码农读书  

这篇文章主要给大家介绍了关于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 工具包, 官方下载地址:wkhtmltopdf.org/downloads.html ,也可以在 DinkToPdf 的官方Github: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:github.com/rdvojmoc/DinkToPdf
译文链接:www.infoworld.com/article/3605276/how-to-create-pdf-documents-in-aspnet-core-5.html
总结
到此这篇关于ASP.NET Core 5中如何生成PDF文档的文章就介绍到这了,更多相关ASP.NET Core5生成PDF内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:ASP.NET Core扩展库之Http请求模拟功能的使用ASP.NET Core扩展库之Http通用扩展库的使用详解ASP.NET Core实现自动依赖注入ASP.NET Core中使用令牌桶限流的实现ASP.NET Core自动生成小写破折号路由的实现方法如何在ASP.NET Core中使用HttpClientFactory如何在ASP.Net Core中使用SerilogASP.NET Core中使用LazyCache的全过程ASP.NET Core扩展库之实体映射使用详解ASP.NET Core快速入门之环境篇

asp.netcore
生成
pdf

相关文章
.NET 单点登录解决方案这里指的单点,泛指在WEB服务端,一个账户同一时刻只能存在一个票据!怎么使同一个用户,在同一时间内只允许登录一次,下面将为大家详细介绍下 2013-10-10
动态组合SQL语句方式实现批量更新的实例动态组合SQL语句方式实现批量更新的实例,需要的朋友可以参考一下 2013-03-03
asp.net core标签助手的高级用法TagHelper+Form这篇文章主要为大家详细介绍了asp.net core标签助手的高级用法TagHelper+Form,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-07-07
asp.net下结合HttpHandler实现图片防盗链asp.net防图片盗链HttpHandler 2010-07-07
ASP.NET Lable中进行换行解决方案这个问题,应该算是很简单的问题,可说实在的,折腾了2个小时的时候,后面整出来的时候,真坑爹呢。现在把这个过程给大家,希望可以给大家一个提醒 2012-12-12
一个伴随ASP.NET从1.0到4.0的OutputCache Bug介绍一个伴随ASP.NET从1.0到4.0的OutputCache Bug介绍,学习.net的朋友可以参考下。 2011-11-11
深入理解Asp.net中DataBinder.Eval的用法总结本篇文章是对Asp.net中DataBinder.Eval的用法进行了详细的分析介绍,需要的朋友参考下 2013-06-06
ASP.NET 2.0 程序安全的基础知识成员关系的概念在人类社会中是一个层次比较低的概念,源于希望属于某个群组的意识。同样,在ASP.NET 2.0程序开始开发涉及到成员关系的应用程序时,必须首先理解身份、验证和授权这几个关键的概念。 2010-04-04
利用Builder方式创建对象示例代码这篇文章主要给大家介绍了关于利用Builder方式创建对象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2018-11-11
JavaScript系列之―同步还是异步?JavaScript系列之―同步还是异步?... 2007-03-03

最新评论

本文由 华域联盟 原创撰写:华域联盟 » ASP.NET Core 5中如何生成PDF文档

转载请保留出处和原文链接:https://www.cnhackhy.com/4952.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部