NewGaoKaoApi/PDFGenerateApi/PdfController.cs

185 lines
9.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
[Route("api/[controller]")]
[ApiController]
public class PdfController : ControllerBase
{
//[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");
// }
//}
/// <summary>
///
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpGet("generate")]
public IActionResult Generate()
{
// 加载中文字体
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<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" }
}
});
// 返回 PDF 文件
return File(stream.ToArray(), "application/pdf", "table_example_with_logo_and_title.pdf");
}
}
}