1、ExporterAttribute:导出特性
Name:名称
HeaderFontSize:头部字体大小
FontSize:正文字体大小
MaxRowNumberOnASheet:一个Sheet最大允许的行数,设置了之后将输出多个Sheet
AutoFitAllColumn:自适应所有列
AutoFitMaxRows:数据超过此行之后不启用自适应,默认关闭
Author:作者
IsDisableAllFilter:是否禁用所有筛选器
2、ExporterHeaderAttribute:导出属性特性,设置列头特性信息
DisplayName:显示名称
FontSize:字体大小
IsBold:是否加粗
FORMAT:格式化(身份证'@',日期'yyyy-MM-dd'、'yyyy-MM-dd HH:mm:ss',数字'#,##0')
IsAutoFit:是否自适应
AutoCenterColumn:自动居中
IsIgnore:是否忽略
Width:宽度
ColumnIndex:排序
WrapText:自动换行
Hidden:隐藏
FontColor:字体颜色
3、导出PDF方法
ExportListByTemplate
ExportByTemplate
ExportBytesByTemplate
4、在wwwroot新建文件夹目录
pdf文件导出目录:\wwwroot\ExportPDF
Html模板目录:\wwwroot\HtmlTemplate
5、管理 NuGet 程序包
bash
Magicodes.IE.Pdf
6、Html模板文件【\wwwroot\HtmlTemplate\receipt.html】
html
<!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>
7、Controller
cs
using Magicodes.ExporterAndImporter.Core.Models;
using Magicodes.ExporterAndImporter.Excel;
using Magicodes.ExporterAndImporter.Pdf;
using Microsoft.AspNetCore.Mvc;
using WebApplication2.Model;
namespace WebApplication2.Controllers
{
[Route("api/Magicodes/[action]")]
[ApiController]
public class MagicodesController : ControllerBase
{
public MagicodesController() { }
/// <summary>
/// 1.根据模板导出列表
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task ExportListByTemplate()
{
//根目录
var root = $"{Directory.GetCurrentDirectory()}\\wwwroot";
//导出文件路径及名称
string fileName = $"{root}\\ExportPDF\\{DateTime.Now.ToString("yyyyMMddHHmmss")}.pdf";
var list = new List<StudentPdf>();
for (int i = 0; i <= 10; i++)
{
list.Add(new StudentPdf
{
Name = $"MR.{i}",
Age = i,
Birthday = DateTime.Now.AddDays(i)
});
}
var exporter = new PdfExporter();
var result = await exporter.ExportListByTemplate(fileName, list);
}
/// <summary>
/// 2.根据模板导出
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task ExportByTemplate()
{
//根目录
var root = $"{Directory.GetCurrentDirectory()}\\wwwroot";
//pdf模板文件
var templatePath = Path.Combine(root, "HtmlTemplate", "receipt.html");
var template = System.IO.File.ReadAllText(templatePath);
var exporter = new PdfExporter();
//导出文件路径及名称
string fileName = $"{root}\\ExportPDF\\{DateTime.Now.ToString("yyyyMMddHHmmss")}.pdf";
//此处使用默认模板导出
ExportFileInfo result = await exporter.ExportByTemplate(fileName, GetModel(), template);
}
/// <summary>
/// 3.导出PDF Bytes 文件
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult> ExportBytesByTemplate()
{
//根目录
var root = $"{Directory.GetCurrentDirectory()}\\wwwroot";
//pdf模板文件
var templatePath = Path.Combine(root, "HtmlTemplate", "receipt.html");
var template = System.IO.File.ReadAllText(templatePath);
var exporter = new PdfExporter();
//文件名称
string fileName = $"{DateTime.Now.ToString("yyyyMMddHHmmss")}.pdf";
var bytes = await exporter.ExportBytesByTemplate(GetModel(), template);
MemoryStream stream = new MemoryStream(bytes);
return new FileStreamResult(stream, "application/octet-stream")
{
FileDownloadName = fileName
};
}
/// <summary>
/// 数据
/// </summary>
/// <returns></returns>
private ReceiptInfoPdf GetModel()
{
var model = new ReceiptInfoPdf
{
Amount = 159873.66M,
Grade = "2025",
IdNo = "12345620000102xxxx",
Name = "张三",
Payee = "科技有限公司",
PaymentMethod = "支付宝支付",
Profession = "篮球",
Remark = "学费",
TradeStatus = "已完成",
TradeTime = DateTime.Now,
UppercaseAmount = "壹拾伍万玖仟捌佰柒拾叁元陆角陆分",
Code = "219071800001"
};
return model;
}
}
}
8、ReceiptInfoPdf 实体类
cs
using Magicodes.ExporterAndImporter.Core;
namespace WebApplication2.Model
{
[Exporter(Name = "电子收款凭证")]
public class ReceiptInfoPdf
{
/// <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 Remark { get; set; }
/// <summary>
/// 年级
/// </summary>
public string Grade { get; set; }
/// <summary>
/// 专业
/// </summary>
public string Profession { get; set; }
/// <summary>
/// 收款人
/// </summary>
public string Payee { get; set; }
/// <summary>
/// 大写金额
/// </summary>
public string UppercaseAmount { get; set; }
/// <summary>
/// 编号
/// </summary>
public string Code { get; set; }
}
}
9、StudentPdf 实体类
cs
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Pdf;
using System.ComponentModel.DataAnnotations;
namespace WebApplication2.Model
{
[PdfExporter(Name = "学生信息", HeaderFontSize = 20, FontSize = 20)]
public class StudentPdf
{
/// <summary>
/// 姓名
/// </summary>
[ExporterHeader(DisplayName = "姓名", FontSize = 10, IsBold = true, IsAutoFit = true)]
[Display(Name = "Display姓名")]
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
[ExporterHeader(DisplayName = "年龄")]
public int Age { get; set; }
/// <summary>
/// 出生日期
/// </summary>
[ExporterHeader(DisplayName = "出生日期", Format = "yyyy-MM-dd")]
public DateTime Birthday { get; set; }
}
}
10、效果图
11、项目
E:\test\WebApplication2\WebApplication2\Controllers\MagicodesController.cs
*
*
*