5

我发现 Ghostscript 能够将 PDF 转换为图像格式。

我尝试了 PDF to Image Converter但无法清楚地理解它。

我已经安装了gs905w64.exe,但是当我尝试使用add reference我的 Web 应用程序时,我收到了这个错误。

A reference to gsdll32.dll could not be added. No type libraries were found in the component.

4

5 回答 5

10

您不需要向您的项目添加任何 DLL 引用。首先下载 gs910w32.exe 应用程序文件,然后将其安装到本地计算机。获取已安装 .exe 文件的位置,例如:-

"C:\Program Files (x86)\gs\gs8.64\bin\gswin32.exe"

在您的 C# 应用程序中使用它:

 
  private void PdfToJpg(string inputPDFFile, string outputImagesPath)
        {
            string ghostScriptPath = @"C:\Program Files (x86)\gs\gs8.64\bin\gswin32.exe";
            String ars = "-dNOPAUSE -sDEVICE=jpeg -r102.4 -o" + outputImagesPath + "%d.jpg -sPAPERSIZE=a4 " + inputPDFFile;
            Process proc = new Process();
            proc.StartInfo.FileName = ghostScriptPath;
            proc.StartInfo.Arguments = ars;
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.Start();
            proc.WaitForExit();
        }
 

如果您输入的 PDF 文件名有空格,您需要将参数更改为

 
String ars = "-dNOPAUSE -sDEVICE=jpeg -r102.4 -o" + outputImagesPath + "%d.jpg -sPAPERSIZE=a4 " +"\"" + inputPDFFile + "\"";
 

您可以使用 -r 标志在参数中指定输出图像的纵横比。如果您使用“-r300”,图像的宽度将为 3000 像素,高度将相应改变,根据上述参数,您将获得 1024 到 768 大小的 jpg 图像。

于 2014-01-09T12:32:35.643 回答
9

您可以使用 C# 运行 GhostScript 命令行或使用 Platform Invoke (pInvoke) 调用直接调用 GhostScript dll。

GhostScript 主要是基于文件的,因此输入是磁盘上文件的路径,输出是磁盘上文件的创建。用于调用dll或exe的参数基本相同,因此直接调用dll并没有太大的好处,但确实可以使代码更好。

我有可用于调用 ghostscript dll 的 C# 包装器,如果您给我发电子邮件(个人资料上的地址),我会将其发送给您。

高温高压

更新:

代码仓库移至https://bitbucket.org/brightertools/ghostscript

于 2012-07-17T08:46:31.440 回答
6

gsdll32.dll文件不是托管的 .NET 库。你不能在你的项目中引用它。您必须将它作为“内容”包含在您的项目中(菜单:添加现有项目)并让 VS 将其复制到输出目录。同时,您应该阅读Ghostscript API 文档PInvoke.net 上的这篇文章,了解如何引用 Ghostscript 函数。

请记住,Ghostscript 都是非托管代码,您必须在使用该库后自己进行清理。

编辑:罗伯特所说的也很重要。当然,您必须使用正确版本的 Ghostscript 库。

于 2012-07-17T07:49:01.590 回答
3

为什么您尝试将库添加为对您的项目的引用?gsdll32.dll是本机 dll,而不是 Dot-Net 库。

当我使用 Visual C# Express 2010 构建示例项目时,我得到一个 exe 文件。如果我执行它,它会尝试访问gsdll32.dll. 现在的问题是,在 64 位系统上生成了 64 位可执行文件,但gsdll32.dll编译为 32 位。

正确的解决方案是修改源代码并替换gsdll32.dllgsdll64.dll出现的任何地方。更简单的解决方案是使用 64 位版本的 Ghostscript,将 复制gsdll64.dll到与 相同的目录ConvertPDF.exe并重命名为gsdll32.dll. 这绝对有效 - 刚刚测试并将 PDF 转换为 TIFF。

于 2012-07-17T07:31:21.490 回答
0

您需要运行以下命令来引用库 http://www.nuget.org/packages/GhostScriptSharp/

VS2012 --> 工具 --> 库包管理器 --> 包管理器控制台

于 2014-04-01T07:06:32.250 回答