编辑
2025-10-21
C#
00

目录

Magicodes.IE PDF导出概述
快速入门:基础导出
安装必要的包
简单的PDF数据导出
自定义PDF模板导出
创建HTML模板
定义数据模型
导出自定义收据
批量导出PDF收据
创建批量导出的模板
批量导出实现
高级特性使用
PdfExporterAttribute 配置选项
总结
#开发教程 #文档生成

在现代企业应用开发中,文档导出是一个常见需求,特别是PDF格式因其跨平台、易分享和保真性而备受青睐。Magicodes.IE作为一款功能强大的.NET导入导出通用库,不仅支持Excel、Word等格式,还提供了完善的PDF导出功能。本文将深入探讨Magicodes.IE的PDF导出功能,帮助开发者快速上手并灵活应用。

Magicodes.IE PDF导出概述

Magicodes.IE是一个功能丰富的导入导出通用库,支持多种格式的文档处理,其中PDF导出模块(Magicodes.IE.Pdf)具有以下特点:

  • 跨平台支持:支持Windows和Linux,兼容x86及x64架构
  • 底层稳定:基于wkhtmltopdf库的封装,已内置各平台包,无需额外安装
  • 功能完善:支持数据表格导出、自定义PDF模板、批量导出等功能
  • 灵活定制:通过特性(Attribute)和HTML模板实现高度自定义

快速入门:基础导出

安装必要的包

首先,需要安装Magicodes.IE.Pdf包:

C#
Install-Package Magicodes.IE.Pdf

简单的PDF数据导出

以学生信息导出为例,我们先定义DTO模型类:

C#
// 通过特性设置PDF文档标题 [PdfExporter(Name = "学生信息列表")] public class Student { // 设置列头显示名称 [ExporterHeader(DisplayName = "姓名")] public string Name { get; set; } [ExporterHeader(DisplayName = "年龄")] public int Age { get; set; } [ExporterHeader(DisplayName = "备注")] public string Remarks { get; set; } }

然后,使用PdfExporter导出数据:

C#
class Program { static async Task Main(string[] args) { // 创建导出器实例 var exporter = new PdfExporter(); // 准备示例数据 var students = new List<Student> { new Student { Name = "张三", Age = 18, Remarks = "学习成绩优秀" }, new Student { Name = "李四", Age = 19, Remarks = "体育特长生" }, new Student { Name = "王五", Age = 20, Remarks = "班级干部" } }; // 执行导出操作 var result = await exporter.ExportListByTemplate("学生信息.pdf", students); // 可以获取到导出文件的路径 Console.WriteLine($"文件导出成功:{result.FileName}"); Console.ReadKey(); } }

image.png

以上代码将生成一个包含学生列表的PDF文档,使用内置的表格模板展示数据。

自定义PDF模板导出

Magicodes.IE的一大特色是支持通过HTML模板自定义PDF内容,非常适合制作收据、报表等格式化文档。

创建HTML模板

首先,创建一个HTML模板文件(例如template.html):

HTML
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"/> <title>收据模板</title> <style type="text/css"> body { font-family: SimSun !important; } p { margin: 0px; } table, td { border: 1px solid #444; border-collapse: collapse; padding: 5px; } </style> </head> <body> <p style="font-size: 1.8rem; text-align: center;"> @Model.Title </p> <p style="font-size: 1.2rem; margin-left: 5%; margin-top: 1%;"> <text>单号:@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> <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> <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> <td style="text-align: center">收款方式</td> <td colspan="2">@Model.Data.PaymentMethod</td> <td style="text-align: center;">交易状态</td> <td colspan="3">@Model.Data.TradeStatus</td> </tr> </table> </body> </html>

定义数据模型

C#
[Exporter(Name = "电子收款凭证")] public class ReceiptInfo { /// <summary> /// 交易时间 /// </summary> public DateTime TradeTime { get; set; } /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 身份证 /// </summary> public string IdNo { get; set; } /// <summary> /// 金额 /// </summary> public decimal Amount { get; set; } /// <summary> /// 支付方式 /// </summary> public string PaymentMethod { get; set; } /// <summary> /// 交易状态 /// </summary> public string TradeStatus { get; set; } /// <summary> /// 大写金额 /// </summary> public string UppercaseAmount { get; set; } /// <summary> /// 编号 /// </summary> public string Code { get; set; } }

导出自定义收据

C#
class Program { static async Task Main(string[] args) { // 读取模板文件 var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "template.html"); var templateContent = File.ReadAllText(tplPath); // 创建导出器 var exporter = new PdfExporter(); // 准备收据数据 var receipt = new ReceiptInfo { Amount = 8888.88M, Name = "张三", IdNo = "430626198906221234", PaymentMethod = "微信支付", TradeStatus = "已完成", TradeTime = DateTime.Now, UppercaseAmount = "捌仟捌佰捌拾捌元捌角捌分", Code = "RCP20250501001" }; // 使用模板导出 var result = await exporter.ExportByTemplate("收据.pdf", receipt, templateContent); Console.WriteLine($"收据导出成功:{result.FileName}"); Console.ReadKey(); } }

image.png

批量导出PDF收据

在实际应用中,我们经常需要批量生成PDF收据,Magicodes.IE也提供了便捷的解决方案。

创建批量导出的模板

HTML
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"/> <title>批量收据</title> <style type="text/css"> body { font-family: SimSun !important; } p { margin: 0px; } table, td { border: 1px solid #444; border-collapse: collapse; padding: 5px; } .evenNum { margin-bottom: 8%; padding-top: 10%; } </style> </head> <body> @for (var i = 0; i < Model.Data.ReceiptInfoInputs.Count; i++) { <div style="height: 41%; width: 100%;" class="@(i % 2 == 0 ? "" : "evenNum")"> <p style="font-size: 1.8rem; text-align: center;"> @Model.Data.Title </p> <p style="font-size: 1.2rem; margin-left: 5%; margin-top: 1%;"> <text>单号:@Model.Data.ReceiptInfoInputs[i].Code</text> <text style="padding-left: 52%; text-align: right;"> 交易时间:@Model.Data.ReceiptInfoInputs[i].TradeTime.ToString("yyyy-MM-dd HH:mm:ss") </text> </p> <table width="90%" style="margin-left: 5%; margin-top: 1%;"> <!-- 表格内容与单个收据类似,使用ReceiptInfoInputs[i]访问数据 --> <tr> <td style="text-align: center; width: 11%;">交款姓名</td> <td colspan="2">@Model.Data.ReceiptInfoInputs[i].Name</td> <td style="text-align: center; width: 13%;">身份证号码</td> <td colspan="3">@Model.Data.ReceiptInfoInputs[i].IdNo</td> </tr> <!-- 其他行... --> </table> </div> } </body> </html>

批量导出实现

C#
using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Excel; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using Magicodes.ExporterAndImporter.Core.Filters; using Magicodes.ExporterAndImporter.Core.Models; using System.Dynamic; using System.Reflection; using System.IO; using Magicodes.ExporterAndImporter.Pdf; namespace AppMagicodesIE { [Exporter(Name = "电子收款凭证")] public class ReceiptInfo { /// <summary> /// 交易时间 /// </summary> public DateTime TradeTime { get; set; } /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 身份证 /// </summary> public string IdNo { get; set; } /// <summary> /// 金额 /// </summary> public decimal Amount { get; set; } /// <summary> /// 支付方式 /// </summary> public string PaymentMethod { get; set; } /// <summary> /// 交易状态 /// </summary> public string TradeStatus { get; set; } /// <summary> /// 大写金额 /// </summary> public string UppercaseAmount { get; set; } /// <summary> /// 编号 /// </summary> public string Code { get; set; } } // 批量收据输入类 public class BatchReceiptInfoInput { public string Title { get; set; } = "电子收款凭证"; public string Payee { get; set; } public List<ReceiptInfo> ReceiptInfoInputs { get; set; } } class Program { static async Task Main(string[] args) { // 读取批量模板 var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "template.html"); var templateContent = File.ReadAllText(tplPath); // 创建导出器 var exporter = new PdfExporter(); // 准备批量数据 var batchInput = new BatchReceiptInfoInput { Payee = "某某公司", ReceiptInfoInputs = new List<ReceiptInfo>() }; // 添加多条收据数据 for (var i = 0; i < 5; i++) { batchInput.ReceiptInfoInputs.Add(new ReceiptInfo { Amount = 1000 + i * 100, Name = $"客户{i + 1}", IdNo = $"43062619890622{1000 + i}", PaymentMethod = "微信支付", TradeStatus = "已完成", TradeTime = DateTime.Now.AddDays(-i), UppercaseAmount = "壹仟元整", // 实际应用中应计算正确的大写金额 Code = $"RCP2025050100{i + 1}" }); } // 执行批量导出 var result = await exporter.ExportByTemplate("批量收据.pdf", batchInput, templateContent); Console.WriteLine($"批量收据导出成功:{result.FileName}"); Console.ReadKey(); } } }

高级特性使用

PdfExporterAttribute 配置选项

Magicodes.IE提供了丰富的配置选项来自定义PDF输出:

C#
[PdfExporter( Name = "高级配置示例", FontSize = 12, Orientation = Orientation.Landscape, // 横向布局 PaperKind = PaperKind.A4, IsWriteHtml = true, // 同时输出HTML模板,方便调试 IsEnablePagesCount = true // 启用分页计数 )] public class AdvancedPdfDemo { // 属性定义... }

总结

Magicodes.IE提供了强大而灵活的PDF导出功能,通过HTML模板和C#特性的组合,开发者可以快速实现各种复杂的PDF文档生成需求。无论是简单的数据表格,还是复杂的收据、报表,都能轻松实现。掌握本文介绍的技术和最佳实践,将帮助您在.NET应用中构建高效、专业的PDF导出功能。

希望本文对您使用Magicodes.IE进行PDF导出开发有所帮助。如有更多问题,欢迎在评论区留言交流!

#Magicodes.IE #PDF导出 #C# #开发教程 #文档生成

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!