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);    }}
注:如需转载,请注明出处,