2025-01-02 12:15:45 +08:00

133 lines
5.1 KiB
C#

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<PDFGreadeManager>
{
#region PDF生成方法_PC
/// <summary>
/// 根据成绩单布局生成对应PDF文件
/// </summary>
/// <param name="filePath">文件保存名字</param>
/// <param name="modelName">文件标题[模块名字]</param>
/// <param name="gradeInfo">所有成绩信息[步骤名,子步骤名,总成绩,实际成绩]</param>
/// <param name="studentName">学生姓名</param>
/// <param name="studentNumber">学生学号</param>
/// <param name="greateOverCall">生成完成后事件</param>
/// <returns></returns>
public void GreatePDFPC(string filePath, string modelName, Queue<string[]> 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<string[]> gradeInfo, string studentName, string studentNumber)
{
GreatePDF_WebGl(fileName, modelName, gradeInfo, studentName, studentNumber);
}
private IEnumerator GreatePDFIterator(string filePath, string modelName, Queue<string[]> 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<string[]> 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
}
}