133 lines
5.1 KiB
C#
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
|
|
}
|
|
} |