0

试图弄清楚如何使用 Ghost 脚本获取 memoryStream 并返回图像。这是执行 rasterizer.Open 后出现的代码和错误:

 public static System.Drawing.Image PDFToImage(MemoryStream inputMS)
    {
        GhostscriptRasterizer rasterizer = null;
        GhostscriptVersionInfo version = null;
        if (Environment.Is64BitProcess)
           version = new GhostscriptVersionInfo(
                new Version(0, 0, 0), @"C:\Program Files\gs\gs9.20\bin\gswin64.exe",
                string.Empty, GhostscriptLicense.GPL);
        else
            version = new GhostscriptVersionInfo( 
                new Version(0, 0, 0), @"C:\Program Files (x86)\gs\gs9.20\bin\gswin32.exe",
                string.Empty, GhostscriptLicense.GPL);

        int dpi = 96;
        System.Drawing.Image img = null;

        using (rasterizer = new GhostscriptRasterizer())
        {
            rasterizer.Open(inputMS, version, true);

            for (int i = 1; i <= rasterizer.PageCount; i++)
            {

                using (MemoryStream ms = new MemoryStream())
                {
                    img = rasterizer.GetPage(dpi, dpi, i);
                    img.Save(ms, ImageFormat.Jpeg);
                    ms.Close();
                }

            }
            rasterizer.Close();
        }
        return img;
    }

GhostScript 控制台

4

2 回答 2

1

问题是您指向的是exe文件而不是dll。当您将“gswin64.exe”替换为“gsdll64.dll”(32 位版本相同)时,您的代码应该可以工作。

于 2017-02-08T09:45:29.933 回答
1

好吧,Ghostscript 告诉你它无法打开文件 '/config:C:\Users\Sean.McNary\ApexRemington\.vs\config\applicationhosts.config' 因为(对于这样一个乱码文件名并不完全不足为奇),它找不到文件。

我假设您在 Ghostscript (这是一个用 C 编写的 DLL)周围使用某种包装器,因为您显然使用的是 C#,如果您要说明您在那里使用的内容会有所帮助。

无论您使用什么包装器,它都“看起来像”,它期望得到一个输入文件名,然后简单地将其传递给 Ghostscript。虽然可以将数据从内存传递到 Ghostscript,并将渲染结果返回到内存中,但您应该注意,如果输入是 PDF 文件,您不会保存任何内容,因为 Ghostscript 会将整个输入假脱机到处理之前的临时文件您必须四处寻找PDF文件,因此您需要随机访问,因此将其写为文件。

你将不得不调试你的包装器,看看它在做什么。

于 2017-02-06T21:14:08.757 回答