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 工具包, 官方下载地址: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 容器中,下面的代码展示了如何去实现。
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:https://github.com/rdvojmoc/dinktopdf
译文链接:https://www.infoworld.com/article/3605276/how-to-create-pdf-documents-in-aspnet-core-5.html
总结
到此这篇关于asp.net core 5中如何生成pdf文档的文章就介绍到这了,更多相关asp.net core5生成pdf内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: golang 生成定单号的操作
下一篇: C++ 如何判断四个点是否构成正方形
推荐阅读
-
如何在ASP.NET Core 中快速构建PDF文档
-
ASP.NET Core 2.0集成Office Online Server(OWAS)实现办公文档的在线预览与编辑(支持word\excel\ppt\pdf等格式)
-
asp.net core web api 生成 swagger 文档
-
ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
-
Asp.Net Core2.0 WebAPI 使用Swagger生成漂亮的接口文档
-
ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介
-
Asp.Net Core 轻松学-利用 Swagger 自动生成接口文档
-
如何使用Rotativa在ASP.NET Core MVC中创建PDF详解
-
ASP.NET Core中快速构建PDF文档的步骤分享第2/2页
-
Asp.Net Core使用swagger生成api文档的完整步骤