在现代企业应用开发中,文档导出是一个常见需求,特别是PDF格式因其跨平台、易分享和保真性而备受青睐。Magicodes.IE作为一款功能强大的.NET导入导出通用库,不仅支持Excel、Word等格式,还提供了完善的PDF导出功能。本文将深入探讨Magicodes.IE的PDF导出功能,帮助开发者快速上手并灵活应用。
Magicodes.IE是一个功能丰富的导入导出通用库,支持多种格式的文档处理,其中PDF导出模块(Magicodes.IE.Pdf)具有以下特点:
首先,需要安装Magicodes.IE.Pdf包:
C#Install-Package Magicodes.IE.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();
}
}
以上代码将生成一个包含学生列表的PDF文档,使用内置的表格模板展示数据。
Magicodes.IE的一大特色是支持通过HTML模板自定义PDF内容,非常适合制作收据、报表等格式化文档。
首先,创建一个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();
}
}
在实际应用中,我们经常需要批量生成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();
}
}
}
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 许可协议。转载请注明出处!