最近在研究Unity3D中读取PDF的内容,预想了三种方案,一是用Java来实现,二是调用c#的iTextSharp库或者PDFBox库来实现,三是下载PDF渲染器插件(土豪可以买这个插件,支持的系统也比较全面),Java不是很精通,我就研究了一下c#调用iTextSharp库来实现,但是遗憾的是不支持UWP系统。
再写代码之前呢,得在资产下的插件文件夹中导入itextsharp.dll, Spire.Pdf.dll, Spire.License.dll, System.Drawing.dll库,才能好使。
直接上传代码:
<代码>//读取PDF文字内容 私人空间ReadPDF_Click () { 字符串路径=应用程序。streamingAssetsPath +“/SimplePDF.pdf”; 味精。文本=oncreate(路径); } 私人字符串oncreate(字符串filepath) { 试一试 { 字符串pdffilename=filepath; PdfReader PdfReader=new PdfReader (pdffilename); int numberOfPages=pdfReader.NumberOfPages; 字符串文字=string.Empty; for (int i=1;我& lt;=numberOfPages;+ + i) { iTextSharp.text.pdf.parser。ITextExtractionStrategy策略=new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy (); +=iTextSharp.text.pdf.parser.PdfTextExtractor文本。GetTextFromPage (pdfReader,策略); } pdfReader.Close (); 返回文本; } 捕获(异常交货) { StreamWriter wlog=File.AppendText (System.AppDomain.CurrentDomain.SetupInformation。ApplicationBase +“\ \ mylog.log”); wlog。WriteLine(“出错文件:”+“原因:“+ ex.ToString ()); wlog.Flush (); wlog.Close (); 返回null; } }代码>
//读PDF中取的图片
<代码>私人空ReadPDFImage () { 字符串路径=应用程序。streamingAssetsPath +“/aa.pdf”; ExtractImageEvent(路径); } 私人空间ExtractImageEvent(字符串padPath) { 试一试 { int指数=0; PdfReader PdfReader=new PdfReader (padPath); Debug.Log (pdfReader.NumberOfPages); for (int pageNumber=1;pageNumber & lt;=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)); 试一试 { foreach (xobj.Keys PdfName名称) { PdfObject obj=xobj.Get(名称); 如果(obj.IsIndirect ()) { PdfDictionary tg=(PdfDictionary) PdfReader.GetPdfObject (obj); 字符串的宽度=tg.Get (PdfName.WIDTH) .ToString (); 字符串的身高=tg.Get (PdfName.HEIGHT) .ToString ();//ImageRenderInfo imgRI=ImageRenderInfo.CreateForXObject ((GraphicsState)新矩阵(float.Parse(宽度),float.Parse(高度)),(PRIndirectReference) obj, tg); ImageRenderInfo imgRI=ImageRenderInfo。CreateForXObject(新GraphicsState (), (PRIndirectReference) obj, tg); RenderImageByte (imgRI、索引); } } } 抓 {继续;} } } 抓住(异常) { 扔; } } 私人空间RenderImageByte (ImageRenderInfo renderInfo, int指数) { PdfImageObject imageObj=renderInfo.GetImage (); pimage=imageObj.GetDrawingImage (); MemoryStream=new MemoryStream女士(); pimage。保存(女士,ImageFormat.Png); byte [] byteData=https://www.yisu.com/zixun/new字节(ms.Length); ms.Position=0; ms.Read (byteData 0 byteData.Length); ms.Close (); Texture2D tex2d=new Texture2D (500、1000); 如果(tex2d.LoadImage (byteData)) { 用户界面图像。纹理=tex2d; }///保存到本地//位图dd=新的位图(pimage);//dd.Save(应用程序。dataPath公司+”/资源/wode.Jpeg”); }代码>
我只测试了windows下好,使其他的没有测试,希望大家能够用得着,也可以测试一下其他的系统。