前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程

ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程

原创
作者头像
HueiFeng
修改2020-02-10 14:37:41
2.2K0
修改2020-02-10 14:37:41
举报
文章被收录于专栏:HueiFeng技术专栏HueiFeng技术专栏

基础教程之导出Pdf收据

说明

本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出

要点

  • 导出PDF数据
  • 自定义PDF模板
  • 导出单据
  • 如何批量导出单据

导出特性

PdfExporterAttribute

  • Orientation: 方向(横向或纵向)
  • PaperKind: 纸张类型(默认A4)
  • IsWriteHtml: 是否输出HTML模板

ExporterHeaderAttribute

DisplayName: 显示名称

主要步骤

1.安装包Magicodes.IE.Pdf

代码语言:txt
复制
Install-Package Magicodes.IE.Pdf

2.导出PDF数据

  • 创建Dto类
代码语言:txt
复制
        public class Student
        {
            /// <summary>
            ///     姓名
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            ///     年龄
            /// </summary>
            public int Age { get; set; }
        }
代码语言:txt
复制
       public async Task ExportPdf()
        {
            var exporter = new PdfExporter();
            var result = await exporter.ExportListByTemplate("test.pdf", new List<Student>()
            {
                new Student
                {
                    Name = "MR.A",
                    Age = 18
                },
                new Student
                {
                    Name = "MR.B",
                    Age = 19
                },
                new Student
                {
                    Name = "MR.B",
                    Age = 20
                }
            });
        }

导出内容如下所示:

3.基础教程之导出Pdf收据-1
3.基础教程之导出Pdf收据-1

通过上述代码我们实现了一个简单的Pdf文件导出,也许这样无法达到我们的要求,我们需要自定义标题,那么请看如下代码

代码语言:txt
复制
        [PdfExporter(Name = "学生信息")]
        public class Student
        {
            /// <summary>
            ///     姓名
            /// </summary>
            [ExporterHeader(DisplayName = "姓名")]
            [Display(Name = "Display姓名")]
            public string Name { get; set; }
            /// <summary>
            ///     年龄
            /// </summary>
            [ExporterHeader(DisplayName = "年龄")]
            public int Age { get; set; }
        }
  1. PdfExporter 通过Name属性来定义文档标题
  2. ExporterHeader DisplayName用来定义属性名称
  3. Display同样定义属性名称,但是优先级小于ExporterHeader

通过修改上述代码执行结果如下所示:

3.基础教程之导出Pdf收据-2
3.基础教程之导出Pdf收据-2

3.导出PDF收据

  • 创建导出模板
代码语言:txt
复制
@using DocumentFormat.OpenXml.EMMA
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta charset="utf-8"/>
    <title></title>
    <style type="text/css">
        body { font-family: SimSun !important; }

        p { margin: 0px; }

        footer {
            color: #333;
            font-size: 1.2rem;
            margin-bottom: 1.5rem;
            margin-right: 5%;
            margin-top: 1.2rem;
            text-align: right;
        }

        table,
        td {
            border: 1px solid #444;
            border-collapse: collapse;
            /* text-align: center; */
            height: 2rem;
            padding: 5px;
        }
    </style>
</head>

<body>
<p style="color: #000; font-size: 1.8rem; height: 32px; text-align: center;">
    @Model.Title
</p>
<p style="color: #333; font-size: 1.2rem; margin-left: 5%; margin-top: 1%;">
    <text>NO:@Model.Data.Code</text>
    <text style="padding-left: 52%; text-align: right;">交易时间:@Model.Data.TradeTime.ToString("yyyy-MM-dd HH:mm:ss")</text>
</p>

<table width="90%" style="margin-left: 5%; margin-top: 1%;">
    <tr style="font-size: 1rem;">
        <td style="text-align: center; width: 11%;">交款姓名</td>
        <td colspan="2">@Model.Data.Name</td>
        <td style="text-align: center; width: 13%;">身份证号码</td>
        <td colspan="3">@Model.Data.IdNo</td>
    </tr>
    <tr style="font-size: 1rem;">
        <td style="text-align: center">交易金额</td>
        <td colspan="6">
            <span>¥:@Model.Data.Amount</span>
            <span style="padding: 0 2% 0 2%;">人民币(大写):</span>
            <span>@Model.Data.UppercaseAmount</span>
        </td>
    </tr>
    <tr style="font-size: 1rem;">
        <td style="text-align: center">收款方式</td>
        <td colspan="2">@Model.Data.PaymentMethod</td>
        <td style="text-align: center; width: 13%;">交易状态</td>
        <td colspan="3">@Model.Data.TradeStatus</td>
    </tr>

    <tr style="font-size: 1rem;">
        <td style="text-align: center">收款事由</td>
        <td style="width: 22.3%;">@Model.Data.Remark</td>
        <td style="text-align: center; width: 11%;">入学年级</td>
        <td style="width: 22.3%;" colspan="2">@Model.Data.Grade</td>
        <td style="text-align: center; width: 11%;">专业</td>
        <td style="width: 22.3%;">@Model.Data.Profession</td>
    </tr>


</table>
</body>
</html>
  • 创建Dto类
代码语言:txt
复制
代码语言:txt
复制
  [Exporter(Name = "湖南心莱信息科技有限公司电子收款凭证")]
代码语言:txt
复制
  public class ReceiptInfo
代码语言:txt
复制
  {
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     交易时间
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public DateTime TradeTime { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     姓名
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Name { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     身份证
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string IdNo { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     金额
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public decimal Amount { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     支付方式
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string PaymentMethod { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     交易状态
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string TradeStatus { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     备注
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Remark { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     年级
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Grade { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     专业
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Profession { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     收款人
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Payee { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     大写金额
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string UppercaseAmount { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     编号
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Code { get; set; }
代码语言:txt
复制
  }
代码语言:txt
复制
  1. 如上代码片段通过Exporter 特性去指定模板中的Title,当然在我们实际开发中也可以不通过该属性去做指定,毕竟我们这一块也是完全自定义的
  • 怎么使用?
代码语言:txt
复制
代码语言:txt
复制
      public async Task ExportReceipt()
代码语言:txt
复制
      {
代码语言:txt
复制
          var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
代码语言:txt
复制
              "receipt.cshtml");
代码语言:txt
复制
          var tpl = File.ReadAllText(tplPath);
代码语言:txt
复制
          var exporter = new PdfExporter();
代码语言:txt
复制
          //此处使用默认模板导出
代码语言:txt
复制
          var result = await exporter.ExportByTemplate("test.pdf",
代码语言:txt
复制
              new ReceiptInfo
代码语言:txt
复制
              {
代码语言:txt
复制
                  Amount = 22939.43M,
代码语言:txt
复制
                  Grade = "2019秋",
代码语言:txt
复制
                  IdNo = "43062619890622xxxx",
代码语言:txt
复制
                  Name = "张三",
代码语言:txt
复制
                  Payee = "湖南心莱信息科技有限公司",
代码语言:txt
复制
                  PaymentMethod = "微信支付",
代码语言:txt
复制
                  Profession = "运动训练",
代码语言:txt
复制
                  Remark = "学费",
代码语言:txt
复制
                  TradeStatus = "已完成",
代码语言:txt
复制
                  TradeTime = DateTime.Now,
代码语言:txt
复制
                  UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",
代码语言:txt
复制
                  Code = "19071800001"
代码语言:txt
复制
              }, tpl);
代码语言:txt
复制
      }
代码语言:txt
复制

通过上述代码我们需要进行指定传递我们模板路径及模板内容,最终导出效果如下:

3.基础教程之导出Pdf收据-3
3.基础教程之导出Pdf收据-3

4.批量导出PDF收据

  • 创建模板
代码语言:txt
复制

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">

<head>

代码语言:txt
复制
  <meta charset="utf-8"/>
代码语言:txt
复制
  <title></title>
代码语言:txt
复制
  <style type="text/css">
代码语言:txt
复制
      body { font-family: SimSun !important; }
代码语言:txt
复制
      p { margin: 0px; }
代码语言:txt
复制
      footer {
代码语言:txt
复制
          color: #333;
代码语言:txt
复制
          font-size: 1.2rem;
代码语言:txt
复制
          margin-bottom: 1.5rem;
代码语言:txt
复制
          margin-right: 5%;
代码语言:txt
复制
          margin-top: 1.2rem;
代码语言:txt
复制
          text-align: right;
代码语言:txt
复制
      }
代码语言:txt
复制
      table,
代码语言:txt
复制
      td {
代码语言:txt
复制
          border: 1px solid #444;
代码语言:txt
复制
          border-collapse: collapse;
代码语言:txt
复制
          height: 2rem;
代码语言:txt
复制
          padding: 5px;
代码语言:txt
复制
      }
代码语言:txt
复制
      .evenNum {
代码语言:txt
复制
          margin-bottom: 8%;
代码语言:txt
复制
          padding-top: 10%;
代码语言:txt
复制
      }
代码语言:txt
复制
  </style>

</head>

<body>

@for (var i = 0; i < Model.Data.ReceiptInfoInputs.Count; i++)

{

代码语言:txt
复制
  <div style="height: 41%; width: 100%;" class="@(i % 2 == 0 ? "" : "evenNum")">
代码语言:txt
复制
      <p style="color: #000; font-size: 1.8rem; height: 32px; text-align: center;">
代码语言:txt
复制
          @Model.Data.Title
代码语言:txt
复制
      </p>
代码语言:txt
复制
      <p style="color: #333; font-size: 1.2rem; margin-left: 5%; margin-top: 1%;">
代码语言:txt
复制
          <text>NO:@Model.Data.ReceiptInfoInputs[i].Code</text>
代码语言:txt
复制
          <text style="padding-left: 52%; text-align: right;">交易时间:@Model.Data.ReceiptInfoInputs[i].TradeTime.ToString("yyyy-MM-dd HH:mm:ss")</text>
代码语言:txt
复制
      </p>
代码语言:txt
复制
      <table width="90%" style="margin-left: 5%; margin-top: 1%;">
代码语言:txt
复制
          <tr style="font-size: 1rem;">
代码语言:txt
复制
              <td style="text-align: center; width: 11%;">交款姓名</td>
代码语言:txt
复制
              <td colspan="2">@Model.Data.ReceiptInfoInputs[i].Name</td>
代码语言:txt
复制
              <td style="text-align: center; width: 13%;">身份证号码</td>
代码语言:txt
复制
              <td colspan="3">@Model.Data.ReceiptInfoInputs[i].IdNo</td>
代码语言:txt
复制
          </tr>
代码语言:txt
复制
          <tr style="font-size: 1rem;">
代码语言:txt
复制
              <td style="text-align: center">交易金额</td>
代码语言:txt
复制
              <td colspan="6">
代码语言:txt
复制
                  <span>¥:@Model.Data.ReceiptInfoInputs[i].Amount</span>
代码语言:txt
复制
                  <span style="padding: 0 2% 0 2%;">人民币(大写):</span>
代码语言:txt
复制
                  <span>@Model.Data.ReceiptInfoInputs[i].UppercaseAmount</span>
代码语言:txt
复制
              </td>
代码语言:txt
复制
          </tr>
代码语言:txt
复制
          <tr style="font-size: 1rem;">
代码语言:txt
复制
              <td style="text-align: center">收款方式</td>
代码语言:txt
复制
              <td colspan="2">@Model.Data.ReceiptInfoInputs[i].PaymentMethod</td>
代码语言:txt
复制
              <td style="text-align: center; width: 13%;">交易状态</td>
代码语言:txt
复制
              <td colspan="3">@Model.Data.ReceiptInfoInputs[i].TradeStatus</td>
代码语言:txt
复制
          </tr>
代码语言:txt
复制
          <tr style="font-size: 1rem;">
代码语言:txt
复制
              <td style="text-align: center">收款事由</td>
代码语言:txt
复制
              <td style="width: 22.3%;">@Model.Data.ReceiptInfoInputs[i].Remark</td>
代码语言:txt
复制
              <td style="text-align: center; width: 11%;">入学年级</td>
代码语言:txt
复制
              <td style="width: 22.3%;" colspan="2">@Model.Data.ReceiptInfoInputs[i].Grade</td>
代码语言:txt
复制
              <td style="text-align: center; width: 11%;">专业</td>
代码语言:txt
复制
              <td style="width: 22.3%;">@Model.Data.ReceiptInfoInputs[i].Profession</td>
代码语言:txt
复制
          </tr>
代码语言:txt
复制
      </table>
代码语言:txt
复制
  </div>

}

</body>

</html>

代码语言:txt
复制
  • 创建Dto类
代码语言:txt
复制
代码语言:txt
复制
  /// <summary>
代码语言:txt
复制
  ///     批量导出Dto
代码语言:txt
复制
  /// </summary>
代码语言:txt
复制
  [PdfExporter(Orientation = Orientation.Portrait, PaperKind = PaperKind.A5)]
代码语言:txt
复制
  public class BatchReceiptInfoDto
代码语言:txt
复制
  {
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     交易时间
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public DateTime TradeTime { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     姓名
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Name { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     身份证
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string IdNo { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     金额
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public decimal Amount { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     支付方式
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string PaymentMethod { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     交易状态
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string TradeStatus { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     备注
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Remark { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     年级
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Grade { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     专业
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Profession { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     大写金额
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string UppercaseAmount { get; set; }
代码语言:txt
复制
      /// <summary>
代码语言:txt
复制
      ///     编号
代码语言:txt
复制
      /// </summary>
代码语言:txt
复制
      public string Code { get; set; }
代码语言:txt
复制
  }
代码语言:txt
复制
  • 如何使用
代码语言:txt
复制
代码语言:txt
复制
      public async Task BathExportReceipt()
代码语言:txt
复制
      {
代码语言:txt
复制
          var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
代码语言:txt
复制
              "batchReceipt.cshtml");
代码语言:txt
复制
          var tpl = File.ReadAllText(tplPath);
代码语言:txt
复制
          var exporter = new PdfExporter();
代码语言:txt
复制
          var input = new BatchReceiptInfoInput
代码语言:txt
复制
          {
代码语言:txt
复制
              Payee = "湖南心莱信息科技有限公司",
代码语言:txt
复制
              ReceiptInfoInputs = new List<BatchReceiptInfoDto>()
代码语言:txt
复制
          };
代码语言:txt
复制
          for (var i = 0; i < 20; i++)
代码语言:txt
复制
              input.ReceiptInfoInputs.Add(new BatchReceiptInfoDto
代码语言:txt
复制
              {
代码语言:txt
复制
                  Amount = 22939.43M,
代码语言:txt
复制
                  Grade = "2019秋",
代码语言:txt
复制
                  IdNo = "43062619890622xxxx",
代码语言:txt
复制
                  Name = "张三",
代码语言:txt
复制
                  PaymentMethod = "微信支付",
代码语言:txt
复制
                  Profession = "运动训练",
代码语言:txt
复制
                  Remark = "学费",
代码语言:txt
复制
                  TradeStatus = "已完成",
代码语言:txt
复制
                  TradeTime = DateTime.Now,
代码语言:txt
复制
                  UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",
代码语言:txt
复制
                  Code = "1907180000" + i
代码语言:txt
复制
              });
代码语言:txt
复制
          //此处使用默认模板导出
代码语言:txt
复制
          var result = await exporter.ExportByTemplate("test.pdf", input, tpl);
代码语言:txt
复制
      }
代码语言:txt
复制

通过上述代码我们需要进行指定传递我们模板路径及模板内容,最终导出效果如下:

3.基础教程之导出Pdf收据-4
3.基础教程之导出Pdf收据-4
  1. PdfExporterAttribute Orientation进行方向如横向或纵向
  2. PaperKind 纸张类型(默认A4)

Reference

https://github.com/dotnetcore/Magicodes.IE

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础教程之导出Pdf收据
    • 说明
      • 要点
        • 导出特性
          • PdfExporterAttribute
          • ExporterHeaderAttribute
        • 主要步骤
          • 1.安装包Magicodes.IE.Pdf
          • 2.导出PDF数据
          • 3.导出PDF收据
          • 4.批量导出PDF收据
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档