使用GhostScript将pdf转换为图像 - 如何引用gsdll32.dll?

时间:2012-09-05 18:17:34

标签: c# asp.net pdf ghostscript

我正在尝试使用GhostScript从pdf创建图像。这是我的代码:

GhostscriptWrapper.ConvertToBMP(inputPDFFilePath, outputBMPFilePath);

这是我的GhostscriptWrapper课程:

public class GhostscriptWrapper
{
    public static void ConvertToBMP(string inputPath, string outputPath)
    {
        CallAPI(GetArgs(inputPath, outputPath));
    }

    private static void CallAPI(string[] args)
    {
        IntPtr ptr;
        CreateAPIInstance(out ptr, IntPtr.Zero);
        InitAPI(ptr, args.Length, args);
        Cleanup(ptr);
    }

    private static void Cleanup(IntPtr gsInstancePtr)
    {
        ExitAPI(gsInstancePtr);
        DeleteAPIInstance(gsInstancePtr);
    }        

    [DllImport("gsdll32.dll", EntryPoint="gsapi_new_instance")]
    private static extern int CreateAPIInstance(out IntPtr pinstance,
        IntPtr caller_handle);

    [DllImport("gsdll32.dll", EntryPoint="gsapi_delete_instance")]
    private static extern void DeleteAPIInstance(IntPtr instance);

    [DllImport("gsdll32.dll", EntryPoint="gsapi_exit")]
    private static extern int ExitAPI(IntPtr instance);                

    [DllImport("gsdll32.dll", EntryPoint="gsapi_init_with_args")]
    private static extern int InitAPI(IntPtr instance, int argc,
        string[] argv);

    private static string[] GetArgs(string inputPath, string outputPath)
    {
        return new string[] { "-dNOPAUSE", "-dBATCH", "-dSAFER",
            "-dTextAlphaBits=4", "-dGraphicsAlphaBits=4", "-sDEVICE=bmp16m",
             string.Format("-r{0}x{1}", 0x48, 0x48), "-dEPSCrop",
             string.Format("-sOutputFile={0}", outputPath), inputPath };
    }
}

我的问题是,当我在页面上运行代码时,我收到此错误:

  

无法加载DLL'gsdll32.dll':指定的模块无法加载   找到。 (HRESULT异常:0x8007007E)

我有实际的dll文件,我想也许我只需要添加对bin文件夹的引用,但是当我尝试这个时,我收到了这个错误:

  

无法添加对“D:\ gsdll32.dll”的引用。没有类型   在组件中找到了库

所以我有点卡住 - 我有dll,但我不知道如何引用它。有人知道我需要做什么吗?

4 个答案:

答案 0 :(得分:4)

在软件包管理器控制台类型:Install-Package Ghostscript.Net

答案 1 :(得分:2)

据我所知,你不能只是添加一个参考'到DLL,除非可能是为C#或.NET编写的,而Ghostscript不是,用C语言编写。

您需要使用Win32 API调用' LoadLibrary'或者C#/ .NET等价物。

您的第一个错误看起来似乎无法找到DLL,当您启动应用程序时,您是否在当前目录中获得了DLL的副本?

答案 2 :(得分:1)

答案 3 :(得分:1)

尝试使用dll的完整路径而不是仅使用名称。就像你的dll保持在

D:\TestApplication\bin\gsdll32.dll

然后,

[DllImport("gsdll32.dll", EntryPoint="gsapi_new_instance")]

上面的陈述将是

[DllImport("D:\\TestApplication\\bin\\gsdll32.dll", EntryPoint="gsapi_new_instance")]