Unity3D讀取PDF文件內容
阿新 • • 發佈:2018-07-05
讀取 直接 min posit rec unity3d gettext fim write 最近在研究Unity3D中讀取PDF的內容,預想了三種方案,一是用Java來實現,二是調用C#的iTextSharp庫或者PDFBox庫來實現,三是下載PDF Renderer插件(土豪可以買這個插件,支持的系統也比較全面),java不是很精通,我就研究了一下C#調用iTextSharp庫來實現,但是遺憾的是不支持UWP系統。
再寫代碼之前呢,得在Assets下的Plugins文件夾中導入itextsharp.dll、Spire.Pdf.dll、Spire.License.dll、System.Drawing.dll庫,才能好使。
直接上傳代碼:
//讀取PDF文字內容 private void ReadPDF_Click() { string path = Application.streamingAssetsPath + "/SimplePDF.pdf"; msg.text = OnCreated(path); } private string OnCreated(string filepath) { try { string pdffilename = filepath; PdfReader pdfReader = new PdfReader(pdffilename); int numberOfPages = pdfReader.NumberOfPages; string text = string.Empty; for (int i = 1; i <= numberOfPages; ++i) { iTextSharp.text.pdf.parser.ITextExtractionStrategy strategy = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy(); text += iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(pdfReader, i, strategy); } pdfReader.Close(); return text; } catch (Exception ex) { StreamWriter wlog = File.AppendText(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\mylog.log"); wlog.WriteLine("出錯文件:" + "原因:" + ex.ToString()); wlog.Flush(); wlog.Close(); return null; } }
//讀取PDF中的圖片
private void ReadPDFImage() { string path = Application.streamingAssetsPath + "/aa.pdf"; ExtractImageEvent(path); } private void ExtractImageEvent(string padPath) { try { int index = 0; PdfReader pdfReader = new PdfReader(padPath); Debug.Log(pdfReader.NumberOfPages); for (int pageNumber = 1; pageNumber <= pdfReader.NumberOfPages; pageNumber++) { PdfReader pdf = new PdfReader(padPath); PdfDictionary pg = pdf.GetPageN(pageNumber); PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES)); PdfDictionary xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT)); try { foreach (PdfName name in xobj.Keys) { PdfObject obj = xobj.Get(name); if (obj.IsIndirect()) { PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj); string width = tg.Get(PdfName.WIDTH).ToString(); string height = tg.Get(PdfName.HEIGHT).ToString(); //ImageRenderInfo imgRI = ImageRenderInfo.CreateForXObject((GraphicsState)new Matrix(float.Parse(width), float.Parse(height)), (PRIndirectReference)obj, tg); ImageRenderInfo imgRI = ImageRenderInfo.CreateForXObject(new GraphicsState(), (PRIndirectReference)obj, tg); RenderImageByte(imgRI,index); } } } catch { continue; } } } catch (Exception) { throw; } } private void RenderImageByte(ImageRenderInfo renderInfo,int index) { PdfImageObject imageObj = renderInfo.GetImage(); pimage = imageObj.GetDrawingImage(); MemoryStream ms = new MemoryStream(); pimage.Save(ms, ImageFormat.Png); byte[] byteData = new Byte[ms.Length]; ms.Position = 0; ms.Read(byteData, 0, byteData.Length); ms.Close(); Texture2D tex2d = new Texture2D(500, 1000); if (tex2d.LoadImage(byteData)) { UIimage.texture = tex2d; } ///保存到本地 //Bitmap dd = new Bitmap(pimage); //dd.Save(Application.dataPath + "/Resources/wode.Jpeg"); }
我只測試了windows下好使,其他的沒有測試,希望大家能夠用得著,也可以測試一下其他的系統。
Unity3D讀取PDF文件內容