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

2021-04-26 08:27

阅读:382

YPE html>

标签:教程   char   str   pen   batch   代码执行   open   utf-8   rem   

基础教程之导出Pdf收据

说明

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

要点

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

导出特性

PdfExporterAttribute

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

ExporterHeaderAttribute

DisplayName: 显示名称

主要步骤

1.安装包Magicodes.IE.Pdf

Install-Package Magicodes.IE.Pdf

2.导出PDF数据

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

导出内容如下所示:

技术图片

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

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

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

技术图片

3.导出PDF收据

  • 创建导出模板
@using DocumentFormat.OpenXml.EMMA



@Model.Title

NO:@Model.Data.Code交易时间:@Model.Data.TradeTime.ToString("yyyy-MM-dd HH:mm:ss")

交款姓名 @Model.Data.Name 身份证号码 @Model.Data.IdNo
交易金额 ¥:@Model.Data.Amount 人民币(大写): @Model.Data.UppercaseAmount
收款方式 @Model.Data.PaymentMethod 交易状态 @Model.Data.TradeStatus
收款事由 @Model.Data.Remark 入学年级 @Model.Data.Grade 专业 @Model.Data.Profession
  • 创建Dto类

        [Exporter(Name = "湖南心莱信息科技有限公司电子收款凭证")]
        public class ReceiptInfo
        {
            /// 
            ///     交易时间
            /// 
            public DateTime TradeTime { get; set; }
    
            /// 
            ///     姓名
            /// 
            public string Name { get; set; }
    
            /// 
            ///     身份证
            /// 
            public string IdNo { get; set; }
    
            /// 
            ///     金额
            /// 
            public decimal Amount { get; set; }
    
            /// 
            ///     支付方式
            /// 
            public string PaymentMethod { get; set; }
    
            /// 
            ///     交易状态
            /// 
            public string TradeStatus { get; set; }
    
            /// 
            ///     备注
            /// 
            public string Remark { get; set; }
    
            /// 
            ///     年级
            /// 
            public string Grade { get; set; }
    
            /// 
            ///     专业
            /// 
            public string Profession { get; set; }
    
            /// 
            ///     收款人
            /// 
            public string Payee { get; set; }
    
            /// 
            ///     大写金额
            /// 
            public string UppercaseAmount { get; set; }
    
            /// 
            ///     编号
            /// 
            public string Code { get; set; }
        }
    1. 如上代码片段通过Exporter 特性去指定模板中的Title,当然在我们实际开发中也可以不通过该属性去做指定,毕竟我们这一块也是完全自定义的
  • 怎么使用?

            public async Task ExportReceipt()
            {
                var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
                    "receipt.cshtml");
                var tpl = File.ReadAllText(tplPath);
                var exporter = new PdfExporter();
                //此处使用默认模板导出
                var result = await exporter.ExportByTemplate("test.pdf",
                    new ReceiptInfo
                    {
                        Amount = 22939.43M,
                        Grade = "2019秋",
                        IdNo = "43062619890622xxxx",
                        Name = "张三",
                        Payee = "湖南心莱信息科技有限公司",
                        PaymentMethod = "微信支付",
                        Profession = "运动训练",
                        Remark = "学费",
                        TradeStatus = "已完成",
                        TradeTime = DateTime.Now,
                        UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",
                        Code = "19071800001"
                    }, tpl);
            }

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

技术图片

4.批量导出PDF收据

  • 创建模板

    
    
    
    
    
    
    
    
    @for (var i = 0; i 
            

    @Model.Data.Title

    NO:@Model.Data.ReceiptInfoInputs[i].Code交易时间:@Model.Data.ReceiptInfoInputs[i].TradeTime.ToString("yyyy-MM-dd HH:mm:ss")

    交款姓名 @Model.Data.ReceiptInfoInputs[i].Name 身份证号码 @Model.Data.ReceiptInfoInputs[i].IdNo
    交易金额 ¥:@Model.Data.ReceiptInfoInputs[i].Amount 人民币(大写): @Model.Data.ReceiptInfoInputs[i].UppercaseAmount
    收款方式 @Model.Data.ReceiptInfoInputs[i].PaymentMethod 交易状态 @Model.Data.ReceiptInfoInputs[i].TradeStatus
    收款事由 @Model.Data.ReceiptInfoInputs[i].Remark 入学年级 @Model.Data.ReceiptInfoInputs[i].Grade 专业 @Model.Data.ReceiptInfoInputs[i].Profession
    }
  • 创建Dto类

        /// 
        ///     批量导出Dto
        /// 
        [PdfExporter(Orientation = Orientation.Portrait, PaperKind = PaperKind.A5)]
        public class BatchReceiptInfoDto
        {
            /// 
            ///     交易时间
            /// 
            public DateTime TradeTime { get; set; }
    
            /// 
            ///     姓名
            /// 
            public string Name { get; set; }
    
            /// 
            ///     身份证
            /// 
            public string IdNo { get; set; }
    
            /// 
            ///     金额
            /// 
            public decimal Amount { get; set; }
    
            /// 
            ///     支付方式
            /// 
            public string PaymentMethod { get; set; }
    
            /// 
            ///     交易状态
            /// 
            public string TradeStatus { get; set; }
    
            /// 
            ///     备注
            /// 
            public string Remark { get; set; }
    
            /// 
            ///     年级
            /// 
            public string Grade { get; set; }
    
            /// 
            ///     专业
            /// 
            public string Profession { get; set; }
    
            /// 
            ///     大写金额
            /// 
            public string UppercaseAmount { get; set; }
    
            /// 
            ///     编号
            /// 
            public string Code { get; set; }
        }
  • 如何使用

            public async Task BathExportReceipt()
            {
                var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
                    "batchReceipt.cshtml");
                var tpl = File.ReadAllText(tplPath);
                var exporter = new PdfExporter();
    
                var input = new BatchReceiptInfoInput
                {
                    Payee = "湖南心莱信息科技有限公司",
                    ReceiptInfoInputs = new List()
                };
    
                for (var i = 0; i 

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

技术图片

  1. PdfExporterAttribute Orientation进行方向如横向或纵向
  2. PaperKind 纸张类型(默认A4)

Reference

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

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

标签:教程   char   str   pen   batch   代码执行   open   utf-8   rem   

原文地址:https://www.cnblogs.com/yyfh/p/12222388.html


评论


亲,登录后才可以留言!