using iTextSharp.text; using iTextSharp.text.pdf; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; using UnityEngine; using UnityEngine.Networking; using Font = iTextSharp.text.Font; using Image = iTextSharp.text.Image; public class PDFReport : IDisposable { BaseFont heiBaseFont;//基础字体 public Font titleFont;//报告字体样式 public Font firstTitleFont;//大标题字体样式 public Font secondTitleFont;//小标题字体样式 public Font contentFont;//内容字体样式 public Document document;//文档 string newFontPath; public static IEnumerator CopyResTopath(string Oldpath, string newPath) { if (File.Exists(newPath)) { yield break; } Uri uri = new Uri(Oldpath); using (UnityWebRequest request = UnityWebRequest.Get(uri)) { yield return request.SendWebRequest(); if (string.IsNullOrEmpty(request.error)) { yield return File.WriteAllBytesAsync(newPath, request.downloadHandler.data); } else { WDebug.LogError(request.error); } } } /// /// PC调用这个方法 /// /// /// public IEnumerator Init(string filePath) { document = new Document(PageSize.A4); string dirPath = Path.GetDirectoryName(filePath); Directory.CreateDirectory(dirPath); //为该Document创建一个Writer实例: FileStream os = new FileStream(filePath, FileMode.OpenOrCreate); PdfWriter.GetInstance(document, os); //打开文档 document.Open(); string oldPath = Application.streamingAssetsPath + "/SourceHanSansSC-Medium.otf"; newFontPath = Application.persistentDataPath + "/SourceHanSansSC-Medium.otf"; yield return CopyResTopath(oldPath, newFontPath); //创建字体 heiBaseFont = BaseFont.CreateFont(newFontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); titleFont = new Font(heiBaseFont, 26, 1); firstTitleFont = new Font(heiBaseFont, 20, 1); secondTitleFont = new Font(heiBaseFont, 13, 1); contentFont = new Font(heiBaseFont, 11, Font.NORMAL); } /// /// WebGL调用这个方法 /// /// public IEnumerator WEB_Init(string filePath) { document = new Document(PageSize.A4); string dirPath = Path.GetDirectoryName(filePath); Directory.CreateDirectory(dirPath); //为该Document创建一个Writer实例: FileStream os = new FileStream(filePath, FileMode.OpenOrCreate); PdfWriter.GetInstance(document, os); //Web注销 打开文档 document.Open(); string oldPath = Application.streamingAssetsPath + "/SourceHanSansSC-Medium.otf"; newFontPath = Application.persistentDataPath + "/SourceHanSansSC-Medium.otf"; yield return CopyResTopath(oldPath, newFontPath); //创建字体 heiBaseFont = BaseFont.CreateFont(newFontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); titleFont = new Font(heiBaseFont, 26, 1); firstTitleFont = new Font(heiBaseFont, 20, 1); secondTitleFont = new Font(heiBaseFont, 13, 1); contentFont = new Font(heiBaseFont, 11, Font.NORMAL); } public void addPDFTable(DataTable dt) { List columns = new List(); for (int i = 0; i < dt.Columns.Count; i++) { columns.Add(1); } addPDFTable(dt, columns.ToArray()); } public void addPDFTable(DataTable dt, float[] columnW) { List list = new List(); for (int i = 0; i < dt.Columns.Count; i++) { string s = dt.Columns[i].ColumnName; list.Add(s); } //数据 foreach (DataRow row in dt.Rows) { for (int i = 0; i < dt.Columns.Count; i++) { string s = row[i].ToString(); list.Add(s); } } AddTable(columnW, list.ToArray()); } /// /// 增加表格 /// /// 列数宽度比例 /// 内容 public void AddTable(float[] columns, string[] content) { PdfPTable table = new PdfPTable(columns); table.WidthPercentage = 100; //table.SetTotalWidth(new float[] {10,10,10,10,10,10,10,20 }); for (int i = 0; i < content.Length; i++) { PdfPCell cell = new PdfPCell(new Phrase(content[i], contentFont)); cell.HorizontalAlignment = Element.ALIGN_CENTER; cell.VerticalAlignment = Element.ALIGN_MIDDLE; table.AddCell(cell); } document.Add(table); } /// /// 空格 /// 加入空行,用以区分上下行 /// public void AddNullLine() { Paragraph nullLine = new Paragraph(" ",secondTitleFont); nullLine.Leading = 5; document.Add(nullLine); } /// /// 加入标题 /// /// 标题内容 /// 标题字体,分为一级标题和二级标题 /// 对齐格式,0为左对齐,1为居中 public void AddTitle(string titleStr, int alignmentType = 0) { Paragraph contentP = new Paragraph(new Chunk(titleStr, titleFont)); contentP.Alignment = alignmentType; document.Add(contentP); } /// /// 插入文字内容 /// /// 内容 /// 对齐格式,0为左对齐,1为居中 public void AddContent(string content, int alignmentType = 0) { Paragraph contentP = new Paragraph(new Chunk(content, contentFont)); contentP.Alignment = alignmentType; document.Add(contentP); } /// /// 插入图片 /// /// /// public void AddImage(string imagePath,int width = 475,int height =325) { if (!File.Exists(imagePath)) { WDebug.LogWarning("该路径下不存在指定图片,请检测路径是否正确!"); return; } Image image = Image.GetInstance(imagePath); image.ScaleToFit(width, height); image.Alignment = Element.ALIGN_JUSTIFIED; document.Add(image); } /// /// 关闭文档 /// web需要注释掉这个 /// /// public void Dispose() { document.Close(); } }