如何在内存中编写和查看转换后的pdf文件?

时间:2017-07-31 16:08:03

标签: c# pdf unity3d ghostscript.net

现在我在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

1 个答案:

答案 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>