现在我在Unity中使用ghostscript将pdf转换为jpgs并在我的项目中查看它们。
目前它的流动如下:
-Pdfs被转换为多个jpegs(每页一个)
- 转换后的jpeg写入磁盘
- 然后将它们按字节读入2D纹理
- 并将此2D纹理分配给GameObjects RawImage组件
这在Unity中完美运行,但是......(现在是打嗝)我的项目打算在Microsoft Hololens上运行。 Hololens在Windows 10 API上运行,但容量有限。
出现问题的地方是我尝试转换pdf并在Hololens上查看它们。很简单,Hololens无法在其已知文件夹(图片,文档等)之外创建或删除文件。
我想象中的解决方案是将转换后的jpeg文件写入磁盘,将它们写入内存并从那里查看。
在与GhostScript开发人员交谈时,我被告知GhostScript.NET会做我想要做的事情 - 转换pdf并从内存中查看它们(我相信它使用Rasterizer / Viewer类,但是我不知道理解得很清楚。)
我一直在看最新的GhostScript.NET文档,以确定如何完成这项工作,但我根本不能理解它们。
我的问题是,基于我现在如何使用ghostscript,如何在我的项目中使用GhostScript.NET将转换后的jpegs写入内存并在那里查看?
以下是我现在的处理方式(代码方式):
//instantiate
byte[] fileData;
Texture2D tex = null;
//if a PDF file exists at the current head path
if (File.Exists(CurrentHeadPath))
{
//Transform pdf to jpg
PdfToImage.PDFConvert pp = new PDFConvert();
pp.OutputFormat = "jpeg"; //format
pp.JPEGQuality = 100; //100% quality
pp.ResolutionX = 300; //dpi
pp.ResolutionY = 500;
pp.OutputToMultipleFile = true;
CurrentPDFPath = "Data/myFiles/pdfconvimg.jpg";
//this call is what actually converts the pdf to jpeg files
pp.Convert(CurrentHeadPath, CurrentPDFPath);
//this just loads the first image
if (File.Exists("Data/myFiles/pdfconvimg" + 1 + ".jpg"))
{
//reads in the jpeg file by bytes
fileData = File.ReadAllBytes("Data/myFiles/pdfconvimg" + 1 + ".jpg");
tex = new Texture2D(2, 2);
tex.LoadImage(fileData); //..this will auto-resize the texture dimensions.
//Read Texture into RawImage component
PdfObject.GetComponent<RawImage>().texture = tex;
PdfObject.GetComponent<RawImage>().rectTransform.sizeDelta = new Vector2(288, 400);
PdfObject.GetComponent<RawImage>().enabled = true;
}
else
{
Debug.Log("reached eof");
}
}
convert函数来自我从代码项目获得的名为PDFConvert的脚本。具体来说是How To Convert PDF to Image Using Ghostscript API。
答案 0 :(得分:0)
从GhostScript.Net documentation开始,查看标有“使用GhostscriptRasterizer类”的示例代码。具体如下:
Image img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(pageFilePath, ImageFormat.Png);
Image类似乎是System.Drawing包的一部分,System.Drawing.Image有另一个Save方法,其中第一个参数是System.IO.Stream。< / p>