Unity3D读取PDF文件内容

  

最近在研究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下好,使其他的没有测试,希望大家能够用得着,也可以测试一下其他的系统。

Unity3D读取PDF文件内容