这篇文章主要给大家介绍了关于ASP.NET Core中快速构建PDF文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

比如我们需要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
最新资讯
华为2020上半年成绩单: 手机业务“挑大梁”

华为2020上半年成绩单

从业务板块来看,运营商业务收入为1596亿元人民币,企业业
“支付江湖”B端争夺战升级 拉卡拉携手华为推手机POS

“支付江湖”B端争夺

新一轮支付与收单方式之争正在升级。随着支付C端市场
5G最新标准:纳米级“舞蹈”提升手机八成上行速率

5G最新标准:纳米级“舞

广为人知的5G特性之一“高带宽”,有一个潜在定语“下载
液晶电视主板不能保修 今年或纳入3年质保

液晶电视主板不能保修

TCL方面称,三包法规定逻辑组件保修3年,若主板集成逻辑电
携程旗下订票网站Skyscanner宣布裁员五分之一

携程旗下订票网站Skys

Skyscanner宣布计划裁员五分之一,即300人左右,其中包括
格力电器上半年净利预降5成 线下渠道变革备受关注

格力电器上半年净利预

回看近十年,京海担保曾先后进行了两次减持格力电器,2011
最新文章
用.NET做动态域名解析的方法示例

用.NET做动态域名解析

这篇文章主要介绍了用.NET做动态域名解析的方法示例,文
.NET Core3.1编写混合C++程序

.NET Core3.1编写混合

这篇文章主要介绍了.NET Core3.1编写混合C++程序,文中
ASP.NET Core 3.0使用gRPC的具体方法

ASP.NET Core 3.0使用

这篇文章主要介绍了ASP.NET Core 3.0使用gRPC,文中通过
ASP.NET Core 3.0 gRPC拦截器的使用

ASP.NET Core 3.0 gRP

这篇文章主要介绍了ASP.NET Core 3.0 gRPC拦截器的使
ASP.NET Core 3框架揭秘之 异步线程无法使用IServiceProvider问题

ASP.NET Core 3框架揭

这篇文章主要介绍了ASP.NET Core 3框架揭秘之异步线程
3分钟快速学会在ASP.NET Core MVC中如何使用Cookie

3分钟快速学会在ASP.N

这篇文章主要给大家介绍了关于如何通过3分钟快速学会