unity3d导出pdf
来源:互联网 发布:sybase数据库学习 编辑:程序博客网 时间:2024/05/17 09:36
unity生成pdf格式,首先需要导入iTextSharp.dll ,下面是我写的一些方法,可以直接用.直接贴代码,
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.IO;using iTextSharp.text.pdf;using iTextSharp.text;using System.Text.RegularExpressions;using System.Data.OracleClient;using System;//需要用到的数据结构public class PdfUserInformation { public string goodsName; public string youzhanType; public string cvsLevel; public string writeTime; public string creater; public string creatTime; };//数据结构public class PdfInformation{public string mID;public string mName;public string mReserve; // ....};public class PDFMakerManager {public static PDFMakerManager PDFInstance;public static PDFMakerManager createPDFMakerManager(){if(PDFInstance==null){PDFInstance = new PDFMakerManager ();}return PDFInstance;}//获取物品的子物体名字 通过子物体的名字获取物体 返回物体的链表 public List<PdfInformation> getObjChildsName(Transform mParentObj) { if(mParentObj!=null) { List<string> mChildObjs = new List<string>(); List<PdfInformation> mInfoList = new List<PdfInformation>(); foreach (Transform mChildTransform in mParentObj) { mChildObjs.Add(mChildTransform.gameObject.name); Debug.Log(mChildTransform.gameObject.name); } //获取 数据库 信息 getPdfDatasFromDB(); //通过子物体的名字 获取物体信息 for (int i = 0; i < mChildObjs.Count; i++) { mInfoList.Add(mDirectoryData[mChildObjs[i]]); } return mInfoList; } return null; } //每行五个 还有问题,由于需求以及时间关系,没时间去管了 谁看到了可以帮忙解决下,.thanks List<PdfInformation> mGoodsInfoList = new List<PdfInformation>(); public List<List<PdfInformation>> getAllGoods(List<PdfInformation> mList) { List<List<PdfInformation>> mGoodsAll = new List<List<PdfInformation>>(); List<List<PdfInformation>> mGoods = new List<List<PdfInformation>>(); for (int i = 1; i <= mList.Count;i++ ) { mGoodsInfoList.Add(mList[i-1]); if(i%5==0) { mGoodsAll.Add(mGoodsInfoList); Debug.Log("xx"+mGoodsInfoList.Count); mGoodsInfoList.Clear(); for (int j = 0; j < mGoodsAll.Count; j++) { Debug.Log("InfoList [[[" + j + "]]]is:" + mGoodsAll[j].Count); } }else if(i%5!=0&&i==mList.Count) { mGoodsAll.Add(mGoodsInfoList); mGoodsInfoList.Clear(); } } Debug.Log("InfoList [[[is:" + mGoodsAll.Count); //for (int j = 0; j < mGoodsAll.Count;j++ ) //{ // Debug.Log("InfoList [[[" + j + "]]]is:" + mGoodsAll[j].Count); //} return mGoodsAll; } //从数据库 获取 PDF 信息 Dictionary<string, PdfInformation> mDirectoryData = new Dictionary<string, PdfInformation>(); public List<PdfInformation> getPdfDatasFromDB() { List<PdfInformation> mInfoList = new List<PdfInformation>(); Oracle mDB = new Oracle (); try { string mSearch = "select * from mdb"; mInfoList = mDB.Select(mSearch); mDirectoryData = mDB.getPdfDictionary(); }catch(Exception e) { mDB.Close(); Debug.Log("sql error"); } return mInfoList; }/// pdf 行public PdfPTable CreateRankGoodsInforMationTable(List<List<PdfInformation>> mList){ PdfPTable mTable=new PdfPTable(1); mTable.SetTotalWidth(new float[]{300}); mTable.HorizontalAlignment = PdfPTable.LINECANVAS; if(mList.Count>0) { for(int i=0;i<mList.Count;i++) { Debug.Log("xx"+i+"xxxxxx:"+mList[i].Count);// mTable.AddCell(CreateCell(CreateRowGoodsInforMationTable2(mList[i]),-1,0)); } } mTable.LockedWidth = true; return mTable;}////pdf 列 PdfPTable CreateRowGoodsInforMationTable2(System.Collections.Generic.List<PdfInformation> mList){PdfPTable mTable =new PdfPTable (mList.Count);System.Collections.Generic.List<float> Width = new System.Collections.Generic.List<float> ();if(mList.Count>0){for(int i=0;i<mList.Count;i++){Width.Add(80f);}}float []mWidth = Width.ToArray();mTable.HorizontalAlignment = PdfPTable.BACKGROUNDCANVAS; if (mWidth[0] != -1) { mTable.SetTotalWidth(mWidth); } mTable.LockedWidth = true;for(int i=0;i<mList.Count;i++){mTable.AddCell(CreateGoodsInformationCell(mList[i]));}mList.Clear();return mTable;} //pdf 图 暂时没用 byte[] GoodsImgPrint(Camera SmallCamera,GameObject TakeHuoJia) { int swidth = (int)(SmallCamera.WorldToScreenPoint(TakeHuoJia.transform.position + TakeHuoJia.renderer.bounds.size).x - SmallCamera.WorldToScreenPoint(TakeHuoJia.transform.position - TakeHuoJia.renderer.bounds.size).x); RenderTexture rt = new RenderTexture(Screen.width, resHeight, 72); SmallCamera.pixelRect = new Rect(0, 0, Screen.width, Screen.height); SmallCamera.targetTexture = rt; Texture2D screenShot = new Texture2D(swidth + 100, resHeight, TextureFormat.ARGB32, false); SmallCamera.Render(); RenderTexture.active = rt; screenShot.ReadPixels(new Rect(SmallCamera.WorldToScreenPoint(TakeHuoJia.transform.position - TakeHuoJia.renderer.bounds.size).x, 0, swidth + 100, resHeight), 0, 0); screenShot.Apply(); SmallCamera.targetTexture = null; RenderTexture.active = null; // UnityEngine.Object.Destroy(rt); byte[] bytes = screenShot.EncodeToPNG(); return bytes; } //打印物品详细信息 图 (左边字 右边图 分开的 ,写法一:pdf字和摄像头图) public void PrintGoodsInformations2(string filePath, Camera mCam, GameObject mObj, PdfUserInformation mInfo) { Document document = new Document(new Rectangle(PageSize.A4.Height, PageSize.A4.Width)); PdfWriter.GetInstance(document, new FileStream(filePath, FileMode.Create)); document.Open(); PdfPTable tableAll = tableAll = CreateTable(2, PdfPTable.BACKGROUNDCANVAS, new float[] { document.PageSize.Width / 2 - 50, document.PageSize.Width / 2 - 50 }, true); // PdfPTable tableLeft = PrintGoodsInformations_Left(mInfo); Image tableRight = MakeCameraImg(mCam, 512, 512);//Image.GetInstance( GoodsImgPrint(mCam,mObj)); tableAll.AddCell(CreateCell(tableLeft, -1, 0)); tableAll.AddCell(CreateCell(tableRight, -1, 0)); document.Add(tableAll); document.Close(); ShowTips.showTips(" 打印完成!文件保存在:" + filePath); } //打印物品详细信息 图 (左边字 右边图 分开的 ,写法2:摄像头全图,包括字和图) public void PrintGoodsInformations(string filePath, Camera mCam,GameObject mObj,PdfUserInformation mInfo) { Document document = new Document(new Rectangle(PageSize.A4.Height, PageSize.A4.Width)); PdfWriter.GetInstance(document, new FileStream(filePath, FileMode.Create)); document.Open(); PdfPTable tableAll = CreateTable(1, PdfPTable.BACKGROUNDCANVAS, new float[] {document.PageSize.Width -100 }, true); // PdfPTable tableLeft = PrintGoodsInformations_Left(mInfo); Image tableRight = MakeCameraImg(mCam,680,512);//Image.GetInstance( GoodsImgPrint(mCam,mObj)); // tableAll.AddCell(CreateCell(tableLeft, -1, 0)); tableAll.AddCell(CreateCell(tableRight, -1, 0)); document.Add(tableAll); document.Close(); ShowTips.showTips(" 打印完成!文件保存在:" + filePath); } //打印物品详细信息 左边字 右边字 public void PrintGoodsInformations(string filePath,PdfUserInformation mInfo) { Document document = new Document(new Rectangle(PageSize.A4.Height,PageSize.A4.Width)); PdfWriter.GetInstance(document,new FileStream(filePath,FileMode.Create)); document.Open(); PdfPTable tableAll = CreateTable(2, PdfPTable.BACKGROUNDCANVAS, new float[] { document.PageSize.Width / 2 - 50, document.PageSize.Width / 2 - 50 }, true); // PdfPTable tableLeft = PrintGoodsInformations_Left(mInfo); //测试数据 .... PdfInformation mInfo1 = new PdfInformation(); mInfo1.mName = "aaaa"; PdfInformation mInfo2 = new PdfInformation(); mInfo2.mName = "bbbbb"; List<PdfInformation> mInfoList = new List<PdfInformation>(); mInfoList.Add(mInfo1); mInfoList.Add(mInfo2); PdfInformation mInfo3 = new PdfInformation(); mInfo3.mName = "ccccc"; PdfInformation mInfo4 = new PdfInformation(); mInfo4.mName = "ddddd"; List<PdfInformation> mInfoList2 = new List<PdfInformation>(); mInfoList2.Add(mInfo3); mInfoList2.Add(mInfo4); List<List<PdfInformation>> mLLInfo = new List<List<PdfInformation>>(); mLLInfo.Add(mInfoList); mLLInfo.Add(mInfoList2); //....... //测试数据 数据库数据 // List<List<PdfInformation>> mDBTestList = new List<List<PdfInformation>>(); //mDBTestList = getAllGoods(getPdfDatasFromDB()); //Debug.Log("DBList is:"+mDBTestList.Count); //...... PdfPTable tableRight = CreateRankGoodsInforMationTable(mDBTestList); tableRight.HorizontalAlignment = PdfPTable.BACKGROUNDCANVAS; tableAll.AddCell(CreateCell(tableLeft, -1, 0)); tableAll.AddCell(CreateCell(tableRight,-1,0)); document.Add(tableAll); document.Close(); ShowTips.showTips(" 打印完成!文件保存在:" + filePath); } //详细信息的左半部分 PdfPTable PrintGoodsInformations_Left(PdfUserInformation mInfo) { PdfPTable tableHeaderR = CreateTable(1, PdfPTable.BACKGROUNDCANVAS, new float[] { -1 }, false); PdfPTable tableHeaderminiR = CreateTable(2, PdfPTable.BACKGROUNDCANVAS, new float[] { 1, 3 }, false); Image mark = Image.GetInstance(Application.dataPath + "/Icon.png"); mark.ScaleAbsolute(250, 250); mark.Alignment = Image.LEFT_BORDER; tableHeaderminiR.AddCell(CreateCell(mark, 2, 0));//<<<<<<<<< //tableHeaderminiR.AddCell(CreateCell("商品", -1, 0, CreateFont(32, iTextSharp.text.Font.NORMAL)));//<<<<<<<< tableHeaderminiR.AddCell(CreateCell("标题", -1, 0, CreateFont(32, iTextSharp.text.Font.NORMAL)));//<<<<<<<< tableHeaderminiR.AddCell(CreateCell("xxx", -1, 0, CreateFont(22, iTextSharp.text.Font.NORMAL)));//<<<<<<<< PdfPTable tableDataR = CreateTable(1, PdfPTable.BACKGROUNDCANVAS, new float[] { 350 }, true); tableDataR.AddCell(CreateCell("\n", -1, 0, CreateFont(12, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell("名称:\n", -1, -1, CreateFont(22, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell(mInfo.goodsName, -1, -1, CreateFont(20, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell("类型:\n", -1, -1, CreateFont(22, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell(mInfo.youzhanType, -1, -1, CreateFont(20, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell("级别:\n", -1, -1, CreateFont(22, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell(mInfo.cvsLevel, -1, -1, CreateFont(20, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell("时间:\n", -1, -1, CreateFont(22, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell(mInfo.writeTime, -1, -1, CreateFont(20, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell("创建者:", -1, -1, CreateFont(22, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell(mInfo.creater, -1, -1, CreateFont(20, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell("创建时间:\n", -1, -1, CreateFont(22, iTextSharp.text.Font.NORMAL))); tableDataR.AddCell(CreateCell(mInfo.creatTime, -1, -1, CreateFont(20, iTextSharp.text.Font.NORMAL))); tableHeaderR.AddCell(CreateCell(tableHeaderminiR, -1, 0));//<<<<<<<< tableHeaderR.AddCell(CreateCell(tableDataR, -1, 0)); return tableHeaderR; } //把摄像头视野 制作成png图片 private Rect CutRect = new Rect(0, 0, 1, 1); private int resWidth = 710; private int resHeight = 512; private Image MakeCameraImg(Camera mCam,int width,int height) { Image mImage; RenderTexture rt = new RenderTexture(width, height, 2); mCam.pixelRect = new Rect(0, 0, Screen.width, Screen.height); mCam.targetTexture = rt; Texture2D screenShot = new Texture2D((int)(width * CutRect.width), (int)(height * CutRect.height), TextureFormat.RGB24, false); mCam.Render(); RenderTexture.active = rt; screenShot.ReadPixels(new Rect(width * CutRect.x, width * CutRect.y, width * CutRect.width, height * CutRect.height), 0, 0); mCam.targetTexture = null; RenderTexture.active = null; UnityEngine.Object.Destroy(rt); byte[] bytes = screenShot.EncodeToPNG(); //string filename = Application.dataPath + "/Print/3D" // + System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".png"; //System.IO.File.WriteAllBytes(filename, bytes); mImage = Image.GetInstance(bytes); return mImage; } //打印图片 (摄像头视野看到的/生成的图片) 成PDF public void PrintImgPdf(string filePath, Camera mCam) { Document document = new Document(new Rectangle(PageSize.A4.Height, PageSize.A4.Width)); PdfWriter.GetInstance( document, new FileStream(filePath, FileMode.Create) ); document.Open(); Image imge; imge = MakeCameraImg(mCam,700,512); PdfPTable tableAll = CreateTable(1, PdfPTable.BACKGROUNDCANVAS, new float[] { document.PageSize.Width -50}, true); PdfPTable tableHeaderR = CreateTable(1, PdfPTable.BACKGROUNDCANVAS, new float[] { -1 }, false); PdfPTable tableHeaderminiR = CreateTable(1, PdfPTable.BACKGROUNDCANVAS, new float[] { 1 }, false); // Image mark = imge; mark.ScaleAbsolute(mark.Width, mark.Height); mark.Alignment = Image.LEFT_BORDER; tableHeaderminiR.AddCell(CreateCell(mark, 2, 0));//<<<<<<<<< tableHeaderR.AddCell(CreateCell(tableHeaderminiR, -1, 0));//<<<<<<<< tableAll.AddCell(CreateCell(tableHeaderR, -1, 0));//<<<<<<<< document.Add(tableAll); document.Close(); ShowTips.showTips(" 打印完成!文件保存在:" + filePath); }public PdfPTable CreateTable(int numCol, int HorizontalAlignmentStyle, float[] Width, bool isLockedWidth) { PdfPTable tableAll = new PdfPTable(numCol); tableAll.HorizontalAlignment = HorizontalAlignmentStyle; if (Width[0] != -1) { tableAll.SetTotalWidth(Width); } tableAll.LockedWidth = isLockedWidth; return tableAll; } public PdfPCell CreateCell(PdfPTable table, int rowspan, int borderStyle) { PdfPCell cell = new PdfPCell(table); if (borderStyle != -1 && borderStyle >= 0) { cell.Border = borderStyle; } if (rowspan != -1) { cell.Rowspan = rowspan; } cell.HorizontalAlignment = PdfPCell.ALIGN_LEFT; cell.VerticalAlignment = PdfPCell.ALIGN_LEFT | PdfPCell.ALIGN_CENTER; return cell; } public PdfPCell CreateCell(Image image, int rowspan, int borderStyle) { PdfPCell cell = new PdfPCell(image); if (borderStyle != -1 && borderStyle >= 0) { cell.Border = borderStyle; } if (rowspan != -1) { cell.Rowspan = rowspan; } cell.HorizontalAlignment = PdfPCell.ALIGN_LEFT; cell.VerticalAlignment = PdfPCell.ALIGN_BASELINE; return cell; } public PdfPCell CreateCell(string text, int rowspan, int borderStyle, iTextSharp.text.Font cellFont) { PdfPCell cell = new PdfPCell(new Phrase(text, cellFont)); if (borderStyle != -1 && borderStyle>=0) { cell.Border = borderStyle; } if (rowspan != -1) { cell.Rowspan = rowspan; } cell.HorizontalAlignment = PdfPCell.ALIGN_LEFT; cell.VerticalAlignment = PdfPCell.ALIGN_CENTER; return cell; }/// <summary> 只在详细信息的时候用 PdfPCell CreateGoodsInformationCell(PdfInformation mInfo){ string text = mInfo.mName +"\n";iTextSharp.text.Font font =CreateFont(20, iTextSharp.text.Font.NORMAL);PdfPCell cell = new PdfPCell(new Phrase(text,font));cell.HorizontalAlignment = PdfPCell.ALIGN_LEFT;cell.VerticalAlignment = PdfPCell.ALIGN_LEFT;return cell;}/// </param>/public void CellAddTable(PdfPCell cell,PdfPTable table) { cell.AddElement(table); }public iTextSharp.text.Font CreateFont(float fontSize, int fontStyle) { BaseFont bfChinese = BaseFont.CreateFont( Application.dataPath + "/font/MSYH.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED ); return new iTextSharp.text.Font(bfChinese, fontSize, fontStyle); }}下面是调用:
using UnityEngine;using System.Collections;public class PrintPdf : MonoBehaviour { //需要将这几个摄像头绑定对应的 PDFMakerManager mPdfManager; public Camera m3DCamera; public Camera mHightCam; public GameObject mObj; public Camera mInfoCamera; string mPdfPath; public GameObject[] Texts = new GameObject[6]; public string[] Textstext; PdfUserInformation mPDFUserInfo;// Use this for initializationvoid Start () { Textstext = new string[6]; mPdfManager = new PDFMakerManager(); mPDFUserInfo = new PdfUserInformation(); }// Update is called once per framevoid Update () {} void OnGUI() { if (GUI.Button(new Rect(100, 100, 100, 40), "PdfInfoPrint")) { PrintInfoPdf(); } if (GUI.Button(new Rect(300, 100, 100, 40), "PdfInfoImgPrint")) { PrintInfoImgPdf(); } if (GUI.Button(new Rect(400, 100, 100, 40), "PdfHightPrint")) { PrintHightImgPdf(); } } // 还需要把摄像头绑定对 // 把写字的物体绑定对 // 在 调用函数 需要 找对 位置 public void getText() { for (int i = 0; i < Texts.Length; i++) { Textstext[i] = Texts[i].GetComponent<UILabel>().text; } mPDFUserInfo.goodsName = Textstext[0]; mPDFUserInfo.youzhanType = Textstext[1]; mPDFUserInfo.cvsLevel = Textstext[2]; mPDFUserInfo.writeTime = Textstext[3]; mPDFUserInfo.creater = Textstext[4]; mPDFUserInfo.creatTime = Textstext[5]; } //打印 左边字 右边表格 public void PrintInfoPdf() { getText(); mPdfManager.PrintGoodsInformations(mPdfPath,mPDFUserInfo); }//打印 信息 图片 public void PrintInfoImgPdf() { getText();mPdfPath = Application.dataPath + "/Print/InfoImg" + System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".pdf"; mPdfManager.PrintGoodsInformations(mPdfPath, mInfoCamera, mObj, mPDFUserInfo); } //打印 图 public void PrintHightImgPdf() {mPdfPath = Application.dataPath + "/Print/Top" + System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".pdf"; mPdfManager.PrintImgPdf(mPdfPath, mHightCam); }}注:如需转载,请注明出处,
- unity3d导出pdf
- unity3d导出pdf
- unity3d 利用 itextSharp导出pdf格式
- 导出pdf
- 导出pdf
- 导出pdf
- PowerDesigner导出pdf
- JAVA 导出PDF文件
- flex 导出PDF
- flex datagrid导出PDF
- php导出pdf网站
- C# 导出Pdf
- itext导出pdf
- 数据导出PDF文件
- itext导出pdf
- php导出PDF范例
- Java实现Pdf导出
- java导出pdf
- 模拟器,真机区别
- v5v6s.com 8月26日google收录情况
- 如何将json字符串写入table表格中
- POJ 3321 Apple Tree (DFS + 树状数组)
- [职场规则]职场必备15种能力(你具备多少呢?)
- unity3d导出pdf
- python 关于@的解释
- Enctype=multipart/form-data 的作用
- POJ 2352 Stars
- Praat脚本如何实现将数字的文件名根据需要设定同样的位数以0补充
- 阿里云linux绑定域名
- maven中跳过单元测试
- 快捷键
- HBase中的MapReduce 使用多个Scan和多个表