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 initialization
- void Start () {
- Textstext = new string[6];
- mPdfManager = new PDFMakerManager();
- mPDFUserInfo = new PdfUserInformation();
- }
- // Update is called once per frame
- void 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);
- }
- }