using CG.Framework; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Runtime.InteropServices; using UnityEngine; /******************************************************************************* *Create By CG *Function *******************************************************************************/ namespace CG.UTility { public class PDFGreadeManager : ClassSingleton { #region PDF生成方法_PC /// /// 根据成绩单布局生成对应PDF文件 /// /// 文件保存名字 /// 文件标题[模块名字] /// 所有成绩信息[步骤名,子步骤名,总成绩,实际成绩] /// 学生姓名 /// 学生学号 /// 生成完成后事件 /// public void GreatePDFPC(string filePath, string modelName, Queue gradeInfo, string studentName, string studentNumber, Action greateOverCall) { MonoManager.Instance.StartCoroutine(GreatePDFIterator(filePath , modelName , gradeInfo, studentName , studentNumber , greateOverCall)); } public void GreatePDFWeb(string fileName, string modelName, Queue gradeInfo, string studentName, string studentNumber) { GreatePDF_WebGl(fileName, modelName, gradeInfo, studentName, studentNumber); } private IEnumerator GreatePDFIterator(string filePath, string modelName, Queue gradeInfo, string studentName, string studentNumber, Action greateOverCall) { //添加标题 //每段内容的标题, string[] Layout = new string[] { "考核环节", "考核点", "总分", "实际得分" }; DataTable dt = new DataTable(); for (int i = 0; i < Layout.Length; i++) { dt.Columns.Add(Layout[i]); } //添加步骤内容 float totalScore = 0; float realeScore = 0; foreach (var item in gradeInfo) { //自动计算总分 totalScore += float.Parse(item[2]); realeScore += float.Parse(item[3]); dt.Rows.Add(item); } using (PDFReport pdf = new PDFReport()) { yield return pdf.Init(filePath); pdf.AddTitle(modelName, 1); //空一行 pdf.AddNullLine(); pdf.AddTitle("一、基础信息", 0); pdf.AddNullLine(); //学生内容信息 pdf.AddContent("姓名:" + studentName, 0); pdf.AddContent("学号:" + studentNumber, 0); pdf.AddContent("总分:" + totalScore, 0); pdf.AddContent("实际得分:" + realeScore, 0); //空一行 pdf.AddNullLine(); pdf.AddTitle("二、成绩详情", 0); pdf.AddNullLine(); //添加考核环节标题 pdf.AddNullLine(); pdf.addPDFTable(dt); pdf.AddNullLine(); } WDebug.Log("创建成功打开文件:" + filePath); greateOverCall?.Invoke(); } #endregion #region PDF生成方法_WebGl [DllImport("__Internal")] private static extern void LoadTablePDFBtn(string name, string textData); private void CreatPDF(string name, string textData) { LoadTablePDFBtn(name + ".pdf", textData); } private void GreatePDF_WebGl(string fileName, string modelName, Queue gradeInfo, string studentName, string studentNumber) { float totalScore = 0; float realeScore = 0; foreach (var item in gradeInfo) { //自动计算总分 totalScore += float.Parse(item[2]); realeScore += float.Parse(item[3]); } string[] studentInfo = new string[] { "姓名:" + studentName, "学号:" + studentNumber, "总分:" + totalScore, "实际得分:" + realeScore }; string[] Layout = new string[] { "考核环节", "考核点", "总分", "实际得分" }; string[][] tableData = new string[gradeInfo.Count+1][]; tableData[0] = new string[] { modelName, modelName, modelName, modelName }; tableData[1] = new string[] { "一、基础信息", "一、基础信息", "一、基础信息", "一、基础信息" }; tableData[2] = studentInfo; tableData[3] = new string[] { "二、成绩详情", "二、成绩详情", "二、成绩详情", "二、成绩详情" }; tableData[4] = Layout; for (int i = 5; i < tableData.Length; i++) { tableData[i] = gradeInfo.Dequeue(); } string json = LitJson.JsonMapper.ToJson(tableData); WDebug.Log(json); CreatPDF(fileName, json); } #endregion } }