feat:pdf下载优化

develop
old易 2024-07-03 16:31:54 +08:00
parent 502b9bd5d7
commit 73d613ea05
2 changed files with 19 additions and 12 deletions

View File

@ -319,7 +319,7 @@ namespace New_College.Api.Controllers.Front
});
var stream = PdfOptHelper.CreatePdf(string.Format("{0}-{1}-{2}", query.VolunteerTableName, query.SubjectClaim, query.Score), unversityheaders.ToList(), majorlistheaders.ToList(), ulist, query.CreateTime.Value);
var stream =await PdfOptHelper.CreatePdfAsync(string.Format("{0}-{1}-{2}", query.VolunteerTableName, query.SubjectClaim, query.Score), unversityheaders.ToList(), majorlistheaders.ToList(), ulist, query.CreateTime.Value);
// 返回 PDF 文件
return File(stream.ToArray(), "application/pdf", string.Format("{0}.pdf", DateTime.Now.ToString("yyyyMMddhhssfff_")));

View File

@ -24,7 +24,7 @@ namespace PDFGenerateApi
/// <param name="majors"></param>
/// <param name="dataModels"></param>
/// <returns></returns>
public static MemoryStream CreatePdf(string pagetitle, List<string> headers, List<string> majors, List<dataModel> dataModels,DateTime dtnow)
public static async Task<MemoryStream> CreatePdfAsync(string pagetitle, List<string> headers, List<string> majors, List<dataModel> dataModels, DateTime dtnow)
{
// 创建内存流
using (var stream = new MemoryStream())
@ -59,19 +59,26 @@ namespace PDFGenerateApi
// 添加标题下方内容
Paragraph subtitle = CreateSubTitle(font, string.Format("最后修改时间:{0}", dtnow.ToString("yyyy-MM-dd HH:mm")));
document.Add(subtitle);
dataModels.ForEach(a =>
// 创建并行任务队列
List<Task> tasks = new List<Task>();
Parallel.For(0, dataModels.Count(), tableIndex =>
{
Table universitytable = HeaderTable(font, 9, headers, new List<dataModel>() { a });
lock (document)
{
Table universitytable = HeaderTable(font, 9, headers, new List<dataModel>() { dataModels[tableIndex] });
universitytable.SetMarginTop(20);
document.Add(universitytable);
Table majortable = MajorTable(font, 9, majors, a.majorModels);
Table majortable = MajorTable(font, 9, majors, dataModels[tableIndex].majorModels);
document.Add(majortable);
// 手动分页并添加新的表格,不带表头
// document.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
// 添加空白段落以增加表格间的间距
document.Add(new Paragraph("\n"));
}
});
//专业
// 等待所有并行任务完成
await Task.WhenAll(tasks);
// 关闭文档
document.Close();
// 返回 PDF 文件