ASP.NET Core中快速构建PDF文档的步骤分享第1/2页

  比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间。

  在本文中我们将要使用DinkToPDF来处理我们在.NET Core Web 程序中进行构建PDF文档!就现在我们不多说,直接开始有趣的部分。

前言#

  您可以通过创建PDF文档在我的仓库中,获取源代码,欢迎给个免费的Star...

  现在我们创建一个.NET Core 3.0 项目,至于是mvc、Api、这些我并不在意。创建项目后直接Nuget安装DinkToPDF。随后您需要下载我的代码仓库中的“NativeLibrary”文件夹,在其中,我们将找到两个文件32bit和64bit,因此我们需要为操作系统选择合适的库。我们将从64位文件夹中选择文件。

  最后,我们需要启动该库,并且IOC DinkToPDF。

public void ConfigureServices(IServiceCollection services)
  {
   var context = new CustomAssemblyLoadContext();
   context.LoadUnmanagedLibrary(Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll"));

   services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
   services.AddControllers();
  }

建立实体#

在真实情况的项目中,我们可以从数据库中收集数据或从其他API接收数据。但是为了简单起见,我们将从本地存储中收集PDF文档的数据。随后,我们将创建一个HTML模板并将其存储在PDF文档中。

public class Employee
 {
  public string Name { get; set; }
  public string LastName { get; set; }
  public int Age { get; set; }
  public string Gender { get; set; }
 }

再随后,我们要创建一个新的文件夹Services和里面两类文件 DataServices.cs 和 TemplateGenerator.cs 。完整的结构应如下所示:

public class DataServices
 {
  public static List<Employee> GetAllEmployess() =>
   new List<Employee>
   {
    new Employee { Name="Hao Zi Zhang", LastName="Turner", Age=35, Gender="Male"},
    new Employee { Name="Yu Chen", LastName="Markus", Age=22, Gender="Female"},
    new Employee { Name="Jian Zhi Chu", LastName="Martins", Age=40, Gender="Male"},
    new Employee { Name="ElderJames", LastName="Packner", Age=30, Gender="Female"},
    new Employee { Name="BlaZui", LastName="Doe", Age=45, Gender="Male"}
   };
 }

其中添加服务中返回了某些数据,用于模拟服务。我们要生成一个HTML模板,因此我们需要修改 TemplateGenerator.cs 文件:

public class TempleGenertor
 {
  public static string GetHTMLString()
  {
   var employees = DataServices.GetAllEmployess();

   var sb = new StringBuilder();
   sb.Append(@"
      <html>
       <head>
       </head>
       <body>
        <div class='header'><h1>This is the generated PDF report!!!</h1></div>
        <table align='center'>
         <tr>
          <th>Name</th>
          <th>LastName</th>
          <th>Age</th>
          <th>Gender</th>
         </tr>");

   foreach (var emp in employees)
   {
    sb.AppendFormat(@"<tr>
         <td>{0}</td>
         <td>{1}</td>
         <td>{2}</td>
         <td>{3}</td>
         </tr>", emp.Name, emp.LastName, emp.Age, emp.Gender);
   }
   sb.Append(@"
        </table>
       </body>
      </html>");

   return sb.ToString();
  }
 }

如果想要指定css样式,则可以创建某些文件夹,随后在API通过服务器路径来抉择配置。

.header {
 text-align: center;
 color: green;
 padding-bottom: 35px;
}

table {
 width: 80%;
 border-collapse: collapse;
}

td, th {
 border: 1px solid gray;
 padding: 15px;
 font-size: 22px;
 text-align: center;
}

table th {
 background-color: green;
 color: white;
}

  就是这样,我们有用于HTML创建的HTML模板。现在,我们可以继续执行Controller逻辑。

[Route("api/PdfCreator")]
 [ApiController]
 public class PdfCreatorController : ControllerBase
 {
  private IConverter _converter;

  public PdfCreatorController(IConverter converter)
  {
   _converter = converter;
  }

  [HttpGet]
  public IActionResult CreatePDF()
  {
   var globalSettings = new GlobalSettings
   {
    ColorMode = ColorMode.Color,
    Orientation = Orientation.Portrait,
    PaperSize = PaperKind.A4,
    Margins = new MarginSettings { Top = 10 },
    DocumentTitle = "PDF Report"
   };

   var objectSettings = new ObjectSettings
   {
    PagesCount = true,
    HtmlContent = TempleGenertor.GetHTMLString(),
    WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "style.css") },
    HeaderSettings = { FontName = "Arial", FontSize = 9, Right = "Page  of [toPage]", Line = true },
    FooterSettings = { FontName = "Arial", FontSize = 9, Line = true, Center = "Report Footer" }
   };

   var pdf = new HtmlToPdfDocument()
   {
    GlobalSettings = globalSettings,
    Objects = { objectSettings }
   };

   var file = _converter.Convert(pdf);
   return File(file, "application/pdf");
  }
 }

代码说明#

在上面的代码中,我们首先通过使用 IConverter 接口将注册的 Converter 与依赖注入注入到构造函数中。然后,我们创建两个对象 globalSettings , objectSettings 并将它们用作 HtmlToPdfDcoument 属性中的配置。

现在让我们来说说 GlobalSettings 和 ObjectSettings 类。

关于GlobalSettings类#

它括了PDF文档的整体配置属性。我们仅使用其中的几个属性来设置颜色模式,方向,纸张尺寸,文档标题等…但它还有还多属性。

关于ObjectSettings类#

ObjectSettings由相关的PDF文档的内容的属性。因此,我们可以配置页面计数器的可见性,页眉和页脚的格式,文档的正文内容(HtmlContent属性)或的Web设置。

HtmlContent属性是此类的非常重要的属性。它包含我们生成的HTML模板,并显示PDF文档的主体。

WebSettings也非常重要,尤其是如果我们有一个外部CSS文件来进行样式设置时。在此属性中,我们可以配置文档的编码并提供CSS文件的路径。如果我们检查此属性,我们将发现更多可以配置的设置,例如PDF文档的背景,文字大小 等等..

启动项目#

通过路由定位到我们的API中,重定向PDF打印界面。

 一切看起来都是那么完美,就这样我们就可以轻松的在ASP.NET Core中构建PDF文档并且还可以完美适配相关逻辑和某些文档设置!!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • 如何使用Rotativa在ASP.NET Core MVC中创建PDF详解

    前言 在本文中,我们将学习如何使用Rotativa.AspNetCore工具从ASP.NET Core中的视图创建PDF.如果您使用ASP.NET MVC,那么Rot​​ativa工具已经可用,我们可以使用它来生成pdf. 创建一个MVC项目,无论您是core或不core,都可以nuget下包.命令如下: Install-Package Rotativa #或者 Install-Package Rotativa.AspNetCore 这个工具由意大利人Giorgio Bozio创建.他需要在AS

  • ASP.NET Core中快速构建PDF文档的步骤分享第1/2页

    比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本文中我们将要使用DinkToPDF来处理我们在.NET Core Web 程序中进行构建PDF文档!就现在我们不多说,直接开始有趣的部分. 前言# 您可以通过创建PDF文档在我的仓库中,获取源代码,欢迎给个免费的Star... 现在我们创建一个.NET Core 3.0 项目,至于是mvc.Api.

  • 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 Pa

  • Python利用PyPDF2快速拆分PDF文档

    目录 安装PyPDF2模块 创建文件,准备PDF文档 万事俱备,准备开拆 文档的拆分思路 python拆分计算公式: 具体怎么拆? 完整拆分程序: 列表拆分法实现拆分PDF 写在最后 "人生苦短,快学Python",因为这句口号,我也加入了学习Python的浩浩大军,但由于Python真的是可以做的事情太多了,一时迷了眼,不知道自己应该去专攻哪个方向. 经过多方向试探,我还是选择了广而不深的web开发,Python的web开发自然离不开大名鼎鼎的Django,有一次突发奇想,下载了Dj

  • ASP.NET Core中预压缩静态文件的方法步骤

    前言 Web应用程序的优化是非常重要,因为使用更少的CPU,占用更少的带宽可以减少项目的费用. 在ASP.NET Core中我们可以很容易的启用响应压缩,但是针对预压缩文件,就需要做一些额外的功能了. 这篇博客文章展示了如何在ASP.NET Core中预压缩静态文件. 下面话不多说了,来一起看看详细的介绍吧 为什么需要预压缩文件? 虽然在从服务器请求文件时, 我们可以动态压缩文件,但这意味这Web服务器需要做更多的额外工作. 其实只有在新的应用程序部署时才会更改要压缩的文件. 越好的压缩效果需要

  • ASP.NET Core中实现全局异常拦截的完整步骤

    前言 异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概念. 全局异常处理 其实在 ASP.Net Core MVC 框架中已经有了全局异常处理的机制,你可以在一个中心化的地方使用 全局异常处理中间件 来进行异常拦截,如果不用这种中心化方式的话,你就只能在 Controller 或者 Action 作用域上单独处理,这会导致异常处理代码零散在项目各

  • Asp.Net Core使用swagger生成api文档的完整步骤

    前言 .Net Core中有两个集成NSwag的包,分别为Swashbuckle和NSwag.两者的配置大同小异.这里以NSwag为例. 一.前期准备 1.初始化asp.net core 测试项目 新建asp.net core项目,此处略过: 新建apicontroller,并编写测试代码: [Route("api/[controller]")] [ApiController] public class UserApiController : ControllerBase { ///

  • Hangfire在ASP.NET CORE中的简单实现方法

    hangfire是执行后台任务的利器,具体请看官网介绍:https://www.hangfire.io/ 新建一个asp.net core mvc 项目 引入nuget包 Hangfire.AspNetCore hangfire的任务需要数据库持久化,我们在Startup类中修改ConfigureServices 然后在Configure方法中启用hangfire中间件 现在我们运行一下项目,可以看到,数据库里自动生成了很多表,这些表就是用来持久化任务的 我们打开如下地址,可以看到hangfir

  • 使用VS2022在ASP.NET Core中构建轻量级服务

    目录 1. 使用 VS2022 创建 ASP.NET Core 项目 2. 在 ASP.NET Core 中启用一个轻量级的服务 3. 在 ASP.NET Core 中使用 IEndpointConventionBuilder 扩展方法 4. 在 ASP.NET Core 中使用轻量级服务检索记录 5. 在 ASP.NET Core 中使用轻量级服务创建记录 6. 在 ASP.NET Core 中使用轻量级服务删除记录 7. ASP.NET Core 中轻量级服务的配置方法 8. 在 ASP.N

  • PHP中使用TCPDF生成PDF文档实例

    实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快速生成PDF文件的PHP5函数包.TCPDF基于FPDF进行扩展和改进,增强了实用功能. 特性 TCPDF具有以下特性: 1.支持页面页脚: 2.支持HTML标签代码: 3.支持jpg/png/gif/svg图形图像: 4.支持表格: 5.支持中文字符:(有些PDF类不支持中文或者处理中文相当麻烦) 6.自动分页,自动页码,等等.

  • ASP.NET Core中的Razor页面介绍

    目录 简介 Why? 创建Razor页面应用程序 ASP.NETCoreRazor页面-核心功能 模型绑定 Handlers TagHelpersandHTMLHelpers 路由 总结 简介 随着ASP.NET Core 2 即将来临,最热门的新事物是Razor页面. Razor页面是ASP.NET Core的一个新功能,可以使基于页面的编程方式更容易,更高效. 大众的初步印象是对于那些只专注于页面的小型应用来说,Razor页面更容易.更快地取代MVC.然而,事实证明,它可能比这更强大.使用A

随机推荐