实现列表数据导出PDF功能
安装Nuget包
QuestPDF

核心代码
public static string ExportPdf(List<LogLoginListDto> list)
{
TextStyle titleStyle = TextStyle.Default.FontSize(36).SemiBold().FontColor(Colors.Blue.Medium);
string fileName = string.Concat("LogLogin-", DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf");
var tempath = Path.Combine(App.DirectoryConfig.PdfExportPath, "LogLogin", DateTime.Now.ToString("yyyy"), DateTime.Now.ToString("MM"), DateTime.Now.ToString("dd"));
var folderPath = Path.Combine(App.WebHostEnvironment.WebRootPath, tempath);
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
string path_file = Path.Combine(folderPath, fileName);
string logo_path = Path.Combine(App.WebHostEnvironment.WebRootPath, "logo.jpg");
//整合对象
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
//字体默认大小20号字体
page.DefaultTextStyle(x => x.FontSize(20));
//页眉部分
page.Header()
.Row(row =>
{
row.RelativeItem().Column(column =>
{
column.Item().AlignCenter().Text("登录日志信息").FontFamily("simhei").Style(TextStyle.Default.FontSize(22).FontColor(Colors.Blue.Medium));
column.Item().AlignLeft().AlignBottom().Height(50).Width(50).Image(logo_path);
column.Item().AlignRight().AlignTop().Text("编号:______________").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
});
});
//内容部分
page.Content()
.PaddingVertical(1, Unit.Centimetre)
.Column(x =>
{
//表格
x.Item().Table(table =>
{
//设置表头的列参数占比
table.ColumnsDefinition(columns =>
{
columns.ConstantColumn(60);
columns.RelativeColumn();
columns.RelativeColumn();
columns.RelativeColumn();
columns.RelativeColumn();
columns.RelativeColumn();
columns.RelativeColumn();
columns.RelativeColumn();
columns.RelativeColumn(2);
});
// 表头
table.Header(header =>
{
header.Cell().AlignCenter().Text("编号").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().AlignCenter().Text("用户名称").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().AlignCenter().Text("IP").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().AlignCenter().Text("登录地点").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().AlignCenter().Text("浏览器").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().AlignCenter().Text("操作系统").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().AlignCenter().Text("操作状态").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().AlignCenter().Text("操作信息").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().AlignCenter().Text("登录时间").FontFamily("simhei").Style(TextStyle.Default.FontSize(12));
header.Cell().ColumnSpan(9).PaddingVertical(4).BorderBottom(1).BorderColor(Colors.Black);
});
for (int i = 0; i < list.Count; i++)
{
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].ID.ToString()).FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].UserName).FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].Ipaddr).FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].LoginLocation).FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].Browser).FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].Os).FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].Status == "1" ? "失败" : "成功").FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].Msg).FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
table.Cell().Element(CellStyle).AlignCenter().Text(list[i].LoginTime.ToString("yyyy-MM-dd HH:mm:ss")).FontFamily("simsun").Style(TextStyle.Default.FontSize(10));
}
static IContainer CellStyle(IContainer container)
{
return container.BorderBottom(1).PaddingVertical(4);
}
});
});
//页脚部分
page.Footer()
.AlignCenter()
.Text(x =>
{
x.Span("第").FontFamily("simsun").FontSize(12);
x.CurrentPageNumber().FontSize(12);
x.Span("页").FontFamily("simsun").FontSize(12);
});
});
}).GeneratePdf(path_file);
string filePath ="http://" + App.HttpContext.Request.Host + "/" + tempath.Replace("\\", "/") + "/" + fileName;
return filePath;
}
界面效果


Bug

多页的时候,前一页的数据行若某一列数据展示不下时,会出现下一页的第一条数据和上一页最后一条数据相同的情况,除特殊列数据分开展示以外,其余列数据相同。
人生如逆旅
我亦是行人

浙公网安备 33010602011771号