C# 使用C-Ghostscript将pdf转换为图像

C# 使用C-Ghostscript将pdf转换为图像,c#,pdf,unity3d,png,ghostscript,C#,Pdf,Unity3d,Png,Ghostscript,我需要将pdf文件转换成图像,并使用C语言编写Unity脚本。不应在磁盘上安装Ghostscript来执行此操作。我试图包含ghostscript.dll,并将其与使用以下函数的包装器一起使用: gsapi_new_instance gsapi_init_with_args gsapi_exit gsapi_delete_instance 但是,如果我使用命令-sDEVICE=png16m-sOutputFile=outputpath.png inputpath.pdf作为参数,则它不起作用。

我需要将pdf文件转换成图像,并使用C语言编写Unity脚本。不应在磁盘上安装Ghostscript来执行此操作。我试图包含ghostscript.dll,并将其与使用以下函数的包装器一起使用:

gsapi_new_instance
gsapi_init_with_args
gsapi_exit
gsapi_delete_instance
但是,如果我使用命令-sDEVICE=png16m-sOutputFile=outputpath.png inputpath.pdf作为参数,则它不起作用。pdf文件的第一页已创建,但其他页未创建。我在outputpath中使用了-%d,但它也不起作用。e、 g.C:\示例-%d.png

我使用的是Ghostscript版本9.16、Unity版本5.2.0f3和Visual Studio 2015

有谁能告诉我,为什么创建第一个图像文件而其他的没有?使用ghostscript通过C从pdf创建多个图像,有没有简单的替代方法?

您尝试过吗

它是ImageMagick库中非常流行的.NET包装器 它在PDF的引擎盖下使用Ghostscript

首次安装NuGet安装包GhostScriptSharp。 然后你可以这样做:

/// <summary>
/// Convertetion PDF to image.
/// </summary>
/// <param name="Path">Path to file for convertetion</param>
/// <param name="PDFfile">Book name on HDD</param>
/// <param name="Devise">Select one of the formats, jpg</param>
/// <param name="PageFormat">Select one of page formats, like A4</param>
/// <param name="qualityX"> Select quality, 200X200 ~ 1200X1900</param>
/// <param name="qualityY">Select quality, 200X200 ~ 1200X1900</param>
    public void CreatPDF(string Path, string PDFfile, GhostscriptSharp.Settings.GhostscriptDevices Devise,
GhostscriptSharp.Settings.GhostscriptPageSizes PageFormat, int qualityX, int qualityY)
    {
        GhostscriptSharp.GhostscriptSettings SettingsForConvert = new GhostscriptSharp.GhostscriptSettings();

        SettingsForConvert.Device = Devise;

        GhostscriptSharp.Settings.GhostscriptPageSize pageSize = new GhostscriptSharp.Settings.GhostscriptPageSize();
        pageSize.Native = PageFormat;
        SettingsForConvert.Size = pageSize;

        SettingsForConvert.Resolution = new System.Drawing.Size(qualityX, qualityY);

        GhostscriptSharp.GhostscriptWrapper.GenerateOutput(Path, @"C:\" + PDFfile + "\\" + PDFfile + "_" + "%d.jpg", SettingsForConvert); // here you could set path and name for out put file.
    }

非常感谢肯斯和所有其他人

我的问题是我把-dNOPAUSE定义为我的第一个论点。但是,不应为ghostscript定义第一个参数。它不是通过ghostscript实现的,所以我只得到了第一页。多亏了肯斯对-dNOPAUSE的建议,我才找到了错误


我希望这也能帮助其他人。

Ghostscript Sharp和Ghostscript.NET都不是由Artifex维护的,而是由开源贡献者维护的。您没有指定正在使用哪个版本的GS,但我建议您出现问题的原因是因为您没有指定-dNOPAUSE,所以GS在页面之间等待按键。如果你看一下stdout,你可能会看到它要求你按return。嗨,谢谢你的快速回答。我使用的是9.16版。我用-dNOPAUSE测试了这个应用程序,但它仍然不起作用。您可能需要查看stderr和stdout上的后通道输出,看看发生了什么。第一页文件名是否包含数字?如果没有,则输出文件名的语法不正确。是的,第一页包含一个数字。嗯,不明白为什么会出现问题,返回通道包含什么?嗨,谢谢你的快速回答。我试试看。谢谢你的建议。嗨,谢谢你的快速回答!我会试试的!如果我尝试在Visual Studio 2015中安装该软件包,则会收到以下错误消息:安装软件包:无法安装软件包“Ghostscript.NET 1.2.0”。您正试图将此软件包安装到以“.NETFramework,Version=v3.5”为目标的项目中,但该软件包不包含任何与该框架兼容的程序集引用或内容文件。很抱歉这个愚蠢的问题,但是有什么办法可以解决吗?你可以在这里找到它,然后添加到你的解决方案中。谢谢你的链接!我将Ghostscript.NET.dll添加到我的项目引用中。我怎么能在你的代码中使用GhostscriptSharp?好吧,我修正了我的答案。看看它。这就像我在VisualStudio12中检查的那样。包装工作正常。