导出pdf
parent
b72a76af2d
commit
3341f9f729
|
|
@ -215,23 +215,113 @@ namespace New_College.Api.Controllers.Front
|
|||
/// <param name="dto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("generate")]
|
||||
public IActionResult Generate([FromQuery] MinExcelAttrDto dto)
|
||||
public async Task<IActionResult> GenerateAsync([FromQuery] MinExcelAttrDto dto)
|
||||
{
|
||||
string[] unversityheaders = { "志愿", "概率", "院校代码", "院校名称", "24招生计划", "历年", "2023", "2022", "2021" };
|
||||
var stream = PdfOptHelper.CreatePdf("test", unversityheaders.ToList(), new List<PdfOptHelper.dataModel>() {
|
||||
new PdfOptHelper.dataModel()
|
||||
{ id=1,
|
||||
history="录取人数\n计划人数\n最低分\n最低位次\n效位差",
|
||||
planName="A222",
|
||||
probability="90%",
|
||||
universityCode="A99",
|
||||
universityName="中科大大家四大石窟记得哈就开始大肆扩大数据库",
|
||||
years=new List<string>(){"2023", "2022", "2021" }
|
||||
}
|
||||
// 添加表头
|
||||
string[] majorlistheaders = { "序号", "概率", "专业代码", "专业名称", "24招生计划", "历年", "2023", "2022", "2021" };
|
||||
if (dto.id <= 0)
|
||||
{
|
||||
throw new Exception("id为空");
|
||||
}
|
||||
var view = new VolunteerExcelAttrModel();
|
||||
var query = await _VolunteerTableServices.QueryById(dto.id);
|
||||
var items = await _VolunteerTableDetailServices.Query(c => c.VolunteerTableId == dto.id);
|
||||
var PlanMajorIds = new List<int>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
var ids = item.PlanMajorIds.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(c => int.Parse(c)).ToList();
|
||||
PlanMajorIds.AddRange(ids);
|
||||
}
|
||||
var planmajordesc = await _TbSNeedDataInfoServices.Query(c => SqlFunc.ContainsArray(PlanMajorIds, c.ID));//
|
||||
var location = planmajordesc.FirstOrDefault().Location;
|
||||
var majorlist = planmajordesc.Select(c => c.MajorName).ToList();
|
||||
var universityname = planmajordesc.Select(c => c.UniversityName).Distinct().ToList();
|
||||
var planmajorcomplist = await _TbSNeedDataInfoServices.Query(c => c.Location == location && SqlFunc.ContainsArray(majorlist, c.MajorName) && SqlFunc.ContainsArray(universityname, c.UniversityName));//
|
||||
view.VolunteerTableName = query.VolunteerTableName;
|
||||
view.SubjectClaim = query.SubjectClaim;
|
||||
view.Score = query.Score;
|
||||
view.Type = query.Type;
|
||||
var tableDetailItemsViews = new List<VolunteerItemsViewMinExcelAttr>();
|
||||
|
||||
var optmodels = new List<PdfOptHelper.dataModel>();
|
||||
items.ForEach(s =>
|
||||
{
|
||||
var planids = s.PlanMajorIds.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(ss => long.Parse(ss)).ToList();
|
||||
var typeinfo = new List<VolteerItem>();
|
||||
if (!string.IsNullOrWhiteSpace(s.VolunteerRemark))
|
||||
{
|
||||
typeinfo = s.VolunteerRemark.FromJson<List<VolteerItem>>();
|
||||
}
|
||||
var planstatus = planmajordesc.Any(e => e.UniversityName == s.UniversityName);
|
||||
var firstmodels = planmajordesc.Where(e => e.UniversityName == s.UniversityName).FirstOrDefault();
|
||||
planmajordesc.Where(ww => planids.Contains(ww.ID)).ToList().ForEach(a =>
|
||||
{
|
||||
tableDetailItemsViews.Add(new VolunteerItemsViewMinExcelAttr()
|
||||
{
|
||||
UniversityName = s.UniversityName,
|
||||
UniversityCode = s.UniversityCode,
|
||||
AreaName = planstatus ? firstmodels.Province != null ? firstmodels.Province + "|" + (planstatus ? firstmodels.City : "") : "" : "",
|
||||
Nature = planstatus ? firstmodels.Nature != null ? firstmodels.Nature : "" : "",
|
||||
fee = string.IsNullOrEmpty(a.Fee) ? "--" : a.Fee,
|
||||
Major = a.MajorName,
|
||||
MajorCode = a.MajorCode,
|
||||
// MajorGroup = a.MajorGroup,
|
||||
//// MajorRemark = a.Remark,
|
||||
planCount = a._plancount,
|
||||
AcademicYear = a.AcademicYear,
|
||||
Sort = s.OrderSort,
|
||||
MajorSubjectClam = a._23subject,
|
||||
MajorGroup = a.MajorGroup,
|
||||
Percentage = typeinfo.Where(e => e.planId == a.ID).FirstOrDefault().tage.ToString() + "%",
|
||||
_23PlanCount = a._23Count == "0" ? "--" : a._23Count,
|
||||
_22PlanCount = a._22Count == "0" ? "--" : a._22Count,
|
||||
_21PlanCount = a._21Count == "0" ? "--" : a._21Count,
|
||||
_21RankLine = a._21ScoreLine == "0" ? "--" : a._21ScoreLine,
|
||||
_21Scoreline = a._21Score == "0" ? "--" : a._21Score,
|
||||
_22RankLine = a._22ScoreLine == "0" ? "--" : a._22ScoreLine,
|
||||
_22Scoreline = a._22Score == "0" ? "--" : a._22Score,
|
||||
_23RankLine = a._23ScoreLine == 0 ? "--" : a._23ScoreLine.ToString(),
|
||||
_23Scoreline = a._23Score == "0" ? "--" : a._23Score,
|
||||
});
|
||||
});
|
||||
});
|
||||
var ulist = tableDetailItemsViews.Select(c => new PdfOptHelper.dataModel()
|
||||
{
|
||||
universityCode = c.UniversityCode,
|
||||
universityName = c.UniversityName
|
||||
}).ToList();
|
||||
int k = 0;
|
||||
ulist.ForEach(a =>
|
||||
{
|
||||
k++;
|
||||
a.planCount = string.Format("计划数:{0}", "-");
|
||||
a.id = k;
|
||||
a.years = new List<string>()
|
||||
{ "-", "-","-" };
|
||||
a.history = "-";
|
||||
a.probability = "-";
|
||||
a.majorModels = tableDetailItemsViews.Select(c => new PdfOptHelper.dataMajorModel()
|
||||
{
|
||||
id = c.Sort,
|
||||
history = "计划人数\n最低分\n最低位次\n效位差",
|
||||
majorCode = c.MajorCode,
|
||||
mjaorName = c.Major,
|
||||
planCount = string.Format("{0}人\n{1}年\n¥{2}\n{3}", c.planCount.ToString(), c.AcademicYear, c.fee, c.MajorSubjectClam),
|
||||
probability = c.Percentage,
|
||||
years = new List<string>() {
|
||||
string.Format("{0}\n{1}\n{2}\n{3}", c._23PlanCount == "0" ? "--":c._23PlanCount, c._23Scoreline == "0" ? "--" : c._23Scoreline, c._23RankLine == "0" ? "--" : c._23RankLine, "--"),
|
||||
string.Format("{0}\n{1}\n{2}\n{3}", c._22PlanCount == "0" ? "--":c._22PlanCount, c._22Scoreline == "0" ? "--" : c._22Scoreline, c._22RankLine == "0" ? "--" : c._22RankLine, "--"),
|
||||
string.Format("{0}\n{1}\n{2}\n{3}", c._21PlanCount == "0" ? "--":c._21PlanCount, c._21Scoreline == "0" ? "--" : c._21Scoreline, c._21RankLine == "0" ? "--" : c._21RankLine, "--")
|
||||
}
|
||||
}).ToList();
|
||||
});
|
||||
|
||||
|
||||
var stream = PdfOptHelper.CreatePdf(string.Format("{0}-{1}-{2}", query.VolunteerTableName, query.SubjectClaim, query.Score), unversityheaders.ToList(), majorlistheaders.ToList(), ulist);
|
||||
|
||||
// 返回 PDF 文件
|
||||
return File(stream.ToArray(), "application/pdf", "table_example_with_logo_and_title.pdf");
|
||||
return File(stream.ToArray(), "application/pdf", string.Format("{0}.pdf", DateTime.Now.ToString("yyyyMMddhhssfff_")));
|
||||
|
||||
}
|
||||
[HttpGet("Export")]
|
||||
|
|
@ -302,7 +392,6 @@ namespace New_College.Api.Controllers.Front
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
// view.viewMinExcelAttrs = tableDetailItemsViews;
|
||||
//在内存中当开辟空间
|
||||
var memoryStream = new MemoryStream();
|
||||
|
|
|
|||
|
|
@ -688,7 +688,7 @@
|
|||
<param name="id">志愿表Id</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:New_College.Api.Controllers.Front.PcVolunteerController.Generate(New_College.Model.ViewModels.MinExcelAttrDto)">
|
||||
<member name="M:New_College.Api.Controllers.Front.PcVolunteerController.GenerateAsync(New_College.Model.ViewModels.MinExcelAttrDto)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
|
|
|
|||
|
|
@ -15,14 +15,16 @@ namespace PDFGenerateApi
|
|||
public class PdfOptHelper
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="pagetitle"></param>
|
||||
/// <param name="headers"></param>
|
||||
/// <param name="majors"></param>
|
||||
/// <param name="dataModels"></param>
|
||||
/// <returns></returns>
|
||||
public static MemoryStream CreatePdf(string pagetitle, List<string> headers, List<dataModel> dataModels)
|
||||
public static MemoryStream CreatePdf(string pagetitle, List<string> headers, List<string> majors, List<dataModel> dataModels)
|
||||
{
|
||||
// 创建内存流
|
||||
using (var stream = new MemoryStream())
|
||||
|
|
@ -57,74 +59,19 @@ namespace PDFGenerateApi
|
|||
// 添加标题下方内容
|
||||
Paragraph subtitle = CreateSubTitle(font, string.Format("最后修改时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
|
||||
document.Add(subtitle);
|
||||
// 添加表头
|
||||
// string[] unversityheaders = { "志愿", "概率", "院校代码", "院校名称", "24招生计划", "历年", "2023", "2022", "2021" };
|
||||
Table universitytable = HeaderTable(font, 9, headers, new List<dataModel>() { });
|
||||
document.Add(universitytable);
|
||||
#region ***********写入表格
|
||||
// 创建一个 8列的表格,设置表格宽度为 100% 以适应页面宽度
|
||||
// Table universitytable = new Table(9);
|
||||
// universitytable.SetWidth(UnitValue.CreatePercentValue(100));
|
||||
dataModels.ForEach(a =>
|
||||
{
|
||||
Table universitytable = HeaderTable(font, 9, headers, new List<dataModel>() { a });
|
||||
universitytable.SetMarginTop(20);
|
||||
document.Add(universitytable);
|
||||
Table majortable = MajorTable(font, 9, majors, a.majorModels);
|
||||
document.Add(majortable);
|
||||
// 手动分页并添加新的表格,不带表头
|
||||
// document.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
|
||||
});
|
||||
|
||||
//专业
|
||||
|
||||
//int h = 0;
|
||||
//foreach (var header in unversityheaders)
|
||||
//{
|
||||
// h++;
|
||||
// if (h == 4)
|
||||
// {
|
||||
// universitytable.AddHeaderCell(new Cell().Add(new Paragraph(header).SetWidth(85).SetFont(font).SetBold().SetTextAlignment(TextAlignment.CENTER)));
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// universitytable.AddHeaderCell(new Cell().Add(new Paragraph(header).SetFont(font).SetBold().SetTextAlignment(TextAlignment.CENTER)));
|
||||
// }
|
||||
//}
|
||||
|
||||
//// 可选:添加表格数据,这里仅作为示例
|
||||
//for (int i = 1; i <= 1; i++)
|
||||
//{
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph(i.ToString()).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph("0.9").SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph("A999").SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph("山东师范大学(本科)(山东公办)省重点 保研 研究生院 省部共建山东 济南市/综合/公办/排名190" + i).SetWidth(85).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph("100").SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph("历史数据" + i).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph("2023数据" + i).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph("2022数据" + i).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// universitytable.AddCell(new Cell().Add(new Paragraph("2021数据" + i).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
|
||||
//}
|
||||
//document.Add(universitytable);
|
||||
//// float[] columnWidths = { 0.5f, 0.5f, 1, 2, 1, 1, 1, 1, 1 };
|
||||
//Table majortable = new Table(9);
|
||||
//majortable.SetWidth(UnitValue.CreatePercentValue(100));
|
||||
//// 添加表头
|
||||
//string[] majorlistheaders = { "序号", "概率", "专业代码", "专业名称", "24招生计划", "历年", "2023", "2022", "2021" };
|
||||
//foreach (var header in majorlistheaders)
|
||||
//{
|
||||
// majortable.AddHeaderCell(new Cell().Add(new Paragraph(header).SetFont(font).SetBold().SetTextAlignment(TextAlignment.CENTER)));
|
||||
//}
|
||||
|
||||
|
||||
//for (int i = 1; i <= 5; i++)
|
||||
//{
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph(i.ToString()).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph("0.9").SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph("QL").SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph("垫子信息技术" + i).SetWidth(85).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph("20").SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph("录取人数\n计划人数\n最低分\n最低位次\n效位差" + i).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph("2023数据" + i).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph("2022数据" + i).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
// majortable.AddCell(new Cell().Add(new Paragraph("2021数据" + i).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
|
||||
//}
|
||||
//document.Add(majortable);
|
||||
#endregion
|
||||
// 将表格添加到文档中
|
||||
// 关闭文档
|
||||
document.Close();
|
||||
// 返回 PDF 文件
|
||||
|
|
@ -177,7 +124,8 @@ namespace PDFGenerateApi
|
|||
/// <returns></returns>
|
||||
private static Table HeaderTable(PdfFont font, int tb, List<string> headers, List<dataModel> dataList)
|
||||
{
|
||||
Table table = new Table(tb);
|
||||
float[] columnWidths = { 1, 1, 2, 3, 2, 2, 2, 1, 1 };
|
||||
Table table = new Table(columnWidths);
|
||||
table.SetWidth(UnitValue.CreatePercentValue(100));
|
||||
|
||||
|
||||
|
|
@ -200,7 +148,44 @@ namespace PDFGenerateApi
|
|||
table.AddCell(new Cell().Add(new Paragraph(a.probability).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.universityCode).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.universityName).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.planName).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.planCount).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.history).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
a.years.ForEach(a =>
|
||||
{
|
||||
table.AddCell(new Cell().Add(new Paragraph(a).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
|
||||
private static Table MajorTable(PdfFont font, int tb, List<string> headers, List<dataMajorModel> dataList)
|
||||
{
|
||||
float[] columnWidths = { 1, 1, 2, 3, 2, 2, 2, 1, 1 };
|
||||
Table table = new Table(columnWidths);
|
||||
table.SetWidth(UnitValue.CreatePercentValue(100));
|
||||
int h = 0;
|
||||
foreach (var header in headers)
|
||||
{
|
||||
h++;
|
||||
if (h == 4)
|
||||
{
|
||||
table.AddCell(new Cell().Add(new Paragraph(header).SetWidth(85).SetFont(font).SetBold().SetTextAlignment(TextAlignment.CENTER)));
|
||||
}
|
||||
else
|
||||
{
|
||||
table.AddCell(new Cell().Add(new Paragraph(header).SetFont(font).SetBold().SetTextAlignment(TextAlignment.CENTER)));
|
||||
}
|
||||
}
|
||||
dataList.ForEach(a =>
|
||||
{
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.id.ToString()).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.probability).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.majorCode).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.mjaorName).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.planCount).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
table.AddCell(new Cell().Add(new Paragraph(a.history).SetFont(font).SetTextAlignment(TextAlignment.CENTER)));
|
||||
a.years.ForEach(a =>
|
||||
{
|
||||
|
|
@ -211,6 +196,7 @@ namespace PDFGenerateApi
|
|||
}
|
||||
|
||||
|
||||
|
||||
public class dataModel
|
||||
{
|
||||
public int id { get; set; }
|
||||
|
|
@ -231,7 +217,41 @@ namespace PDFGenerateApi
|
|||
public string universityName { get; set; }
|
||||
|
||||
|
||||
public string planName { get; set; }
|
||||
public string planCount { get; set; }
|
||||
|
||||
|
||||
public string history { get; set; }
|
||||
|
||||
public List<string> years { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public List<dataMajorModel> majorModels { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class dataMajorModel
|
||||
{
|
||||
public int id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string probability { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string majorCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string mjaorName { get; set; }
|
||||
|
||||
|
||||
public string planCount { get; set; }
|
||||
|
||||
|
||||
public string history { get; set; }
|
||||
|
|
@ -240,5 +260,7 @@ namespace PDFGenerateApi
|
|||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue