using static System.Net.Mime.MediaTypeNames; using iText.Kernel.Pdf; using iText.Kernel.Geom; using iText.IO.Image; using iText.Layout.Element; using Image = iText.Layout.Element.Image; using iText.Layout.Properties; using iText.Layout; using iText.Kernel.Font; using iText.IO.Font; using iText.Kernel.Colors; namespace PDFGenerateApi { public class PdfOptHelper { /// /// /// /// /// /// /// public static MemoryStream CreatePdf(string pagetitle, List headers, List dataModels) { // 创建内存流 using (var stream = new MemoryStream()) { // 创建 PDF Writer PdfWriter writer = new PdfWriter(stream); PdfDocument pdf = new PdfDocument(writer); // 设置页面大小为横向 A4 PageSize pageSize = PageSize.A4.Rotate(); // 设置页面大小为 A4 pdf.SetDefaultPageSize(pageSize); Document document = new Document(pdf); // 加载中文字体 string fontsPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "fonts", "NotoSansCJKsc-Regular.otf"); //if (!File.Exists(fontsPath)) //{ // bool aa = true; // // _logger.LogError($"Font file not found at path: {fontsPath}"); // // return NotFound("Font file not found."); //} PdfFont font = PdfFontFactory.CreateFont(fontsPath, PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED); // 加载 logo 图像 string logoPath = "https://i5.youzy.cn/util4y/media/files/20231026/7840b6f1f30c413eade15babc70be26e_%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230811154443.png"; // 确保 logo.png 放在 wwwroot 目录下 ImageData imageData = ImageDataFactory.Create(logoPath); Image logo = new Image(imageData); logo.SetWidth(124); logo.SetHeight(40); // 将 logo 添加到文档中 document.Add(logo); Paragraph title = CreateTitle(font, pagetitle); document.Add(title); // 添加标题下方内容 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() { }); document.Add(universitytable); #region ***********写入表格 // 创建一个 8列的表格,设置表格宽度为 100% 以适应页面宽度 // Table universitytable = new Table(9); // universitytable.SetWidth(UnitValue.CreatePercentValue(100)); //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 文件 return stream; } } /// /// 标题 /// /// /// /// private static Paragraph CreateTitle(PdfFont font, string titletext) { Paragraph title = new Paragraph(titletext) .SetTextAlignment(TextAlignment.CENTER) .SetFont(font) .SetBold() .SetFontSize(16) .SetMarginTop(20) .SetMarginBottom(5); return title; } /// /// 创建副标 /// /// /// /// private static Paragraph CreateSubTitle(PdfFont font, string titletext) { Paragraph title = new Paragraph(titletext) .SetTextAlignment(TextAlignment.CENTER) .SetFont(font) .SetFontColor(ColorConstants.GRAY) // 设置字体颜色为灰色 .SetFontSize(12) .SetMarginBottom(20); return title; } /// /// table表头 /// /// /// /// private static Table HeaderTable(PdfFont font, int tb, List headers, List dataList) { Table table = new Table(tb); table.SetWidth(UnitValue.CreatePercentValue(100)); int h = 0; foreach (var header in headers) { h++; if (h == 4) { table.AddHeaderCell(new Cell().Add(new Paragraph(header).SetWidth(85).SetFont(font).SetBold().SetTextAlignment(TextAlignment.CENTER))); } else { table.AddHeaderCell(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.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.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; } public class dataModel { public int id { get; set; } /// /// /// public string probability { get; set; } /// /// /// public string universityCode { get; set; } /// /// /// public string universityName { get; set; } public string planName { get; set; } public string history { get; set; } public List years { get; set; } } } }