diff --git a/PDFGenerateApi/PdfController.cs b/PDFGenerateApi/PdfController.cs index 4ee2e96..e7d44ef 100644 --- a/PDFGenerateApi/PdfController.cs +++ b/PDFGenerateApi/PdfController.cs @@ -1,4 +1,13 @@ -using Microsoft.AspNetCore.Http; +using iText.IO.Font; +using iText.IO.Image; +using iText.Kernel.Colors; +using iText.Kernel.Font; +using iText.Kernel.Geom; +using iText.Kernel.Pdf; +using iText.Layout; +using iText.Layout.Element; +using iText.Layout.Properties; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace PDFGenerateApi @@ -9,6 +18,139 @@ namespace PDFGenerateApi { + //[HttpGet("generate")] + //public IActionResult GeneratePdf() + //{ + // // 创建内存流 + // 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", "AlimamaDongFangDaKai-Regular.otf"); + // if (!System.IO.File.Exists(fontsPath)) + // { + // // _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 = new Paragraph("志愿表2 山东 张三 1段 560分 -位 物/化/生") + // .SetTextAlignment(TextAlignment.CENTER) + // .SetFont(font) + // .SetBold() + // .SetFontSize(16) + // .SetMarginTop(20) + // .SetMarginBottom(5); + // document.Add(title); + // // 添加标题下方内容 + // Paragraph subtitle = new Paragraph(string.Format("最后修改时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm"))) + // .SetTextAlignment(TextAlignment.CENTER) + // .SetFont(font) + // .SetFontColor(ColorConstants.GRAY) // 设置字体颜色为灰色 + // .SetFontSize(12) + // .SetMarginBottom(20); + // document.Add(subtitle); + + // // 创建一个 8列的表格,设置表格宽度为 100% 以适应页面宽度 + // // 创建一个包含九列的表格,并设置每列的宽度 + // // float[] columnWidths = { 0.5f, 0.5f, 1, 2, 1, 1, 1, 1, 1 }; + + // Table universitytable = new Table(9); + // universitytable.SetWidth(UnitValue.CreatePercentValue(100)); + + // // 添加表头 + // string[] unversityheaders = { "志愿", "概率", "院校代码", "院校名称", "24招生计划", "历年", "2023", "2022", "2021" }; + // 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); + + // // 将表格添加到文档中 + + + // // 关闭文档 + // document.Close(); + + // // 返回 PDF 文件 + // return File(stream.ToArray(), "application/pdf", "table_example_with_logo_and_title.pdf"); + // } + //} + /// /// @@ -19,7 +161,7 @@ namespace PDFGenerateApi public IActionResult Generate() { // 加载中文字体 - string fontsPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "fonts", "AlimamaDongFangDaKai-Regular.otf"); + string fontsPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "fonts", "NotoSansCJKsc-Regular.otf"); string[] unversityheaders = { "志愿", "概率", "院校代码", "院校名称", "24招生计划", "历年", "2023", "2022", "2021" }; var stream = PdfOptHelper.CreatePdf(fontsPath, "test", unversityheaders.ToList(), new List() { new PdfOptHelper.dataModel() diff --git a/PDFGenerateApi/PdfOptHelper.cs b/PDFGenerateApi/PdfOptHelper.cs index e3e413e..d753a8f 100644 --- a/PDFGenerateApi/PdfOptHelper.cs +++ b/PDFGenerateApi/PdfOptHelper.cs @@ -159,12 +159,11 @@ namespace PDFGenerateApi private static Paragraph CreateSubTitle(PdfFont font, string titletext) { Paragraph title = new Paragraph(titletext) - .SetTextAlignment(TextAlignment.CENTER) - .SetFont(font) - .SetBold() - .SetFontSize(16) - .SetMarginTop(20) - .SetMarginBottom(5); + .SetTextAlignment(TextAlignment.CENTER) + .SetFont(font) + .SetFontColor(ColorConstants.GRAY) // 设置字体颜色为灰色 + .SetFontSize(12) + .SetMarginBottom(20); return title; }