Magicodes.IE.Pdf 生成导出PDF文件 bytes Stream FileStreamResult 下载
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 程序包
Magicodes.IE.Pdf
6、Html模板文件【\wwwroot\HtmlTemplate\receipt.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
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 实体类
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 实体类
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
*
*
*