无法使用Imagemagick将PDF转换为C#中的任何图像格式

时间:2019-03-26 08:24:30

标签: c# .net imagemagick ghostscript file-conversion

这是我在这里的第一个问题,所以请不要对我苛刻:)无论如何,让我们开始吧:

对于应用程序,我需要将PDF文件转换为图像文件(特定格式无关紧要,但最好是png或jpg)。为此,我尝试使用ImageMagick,但是当我尝试转换任何内容时,都会引发错误。 现在,经过一些研究,我得出的结论是我需要安装Ghostscript,我试图从Visual Studio 2017中集成的NuGet包管理器中获取该脚本。无论如何,当我尝试安装该包时,它会引发以下错误:

  

严重性代码描述项目文件行抑制>状态   错误无法添加对“ gsdll32”的引用。   请确保该文件可访问,并且是有效的> assembly或COM组件。

我正在尝试使用带有C#的Visual Studio 2017完成此操作。我正在使用的API是: +Magick.NET-Q16-AnyCPU V7.11.1 +GhostScriptSharp V1.3.1.4 +Ghostscript V9.2.0 (Throws error)

如果需要了解我正在尝试的内容,以下是我尝试编译的代码:

using ImageMagick.Configuration;
using ImageMagick.Defines;
using ImageMagick.ImageOptimizers;
using ImageMagick;

using GhostscriptSharp;
using GhostscriptSharp.Settings;
        public MagickImageCollection PDFOutput;
        public Image Current;
        public org.pdfclown.documents.Page CurrentPage;

        private void BtnConvert_Click(object sender, EventArgs e)
        {
            if(openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    ImageMagick.MagickNET.Initialize();
                    MagickReadSettings Settings = new MagickReadSettings();
                    Settings.Density = new Density(300, 300);
                    Settings.Format = MagickFormat.Jpg;

                    using (MagickImageCollection Images = new MagickImageCollection())
                    {
                        Images.Add(openFileDialog1.FileName);
                        int Page = 1;
                        int i = 0;
                        foreach(MagickImage Image in Images)
                        {
                            Image.Write("FilePage #" + Page);
                            PDFOutput[i] = Image;
                            Page++;
                            i++;
                        }
                        MessageBox.Show(PDFOutput.Count.ToString());
                    }
                }
                catch(Exception E)
                {
                    MessageBox.Show(E.Message);
                }

我是否缺少有关GhostScipt安装的信息?仅在直接从GhostScript网站下载后才能使用吗?

我希望我已经为我的问题提供了足够的背景信息,并且期待得到关于此问题的任何答案。

非常感谢!

亲切的问候, 梅尔文

1 个答案:

答案 0 :(得分:3)

是的 GhostScript 是以这种方式获得许可的,因此人们不会将其包含在包装器/批处理文件中。您需要确保拥有dll。

通常必须下载(gsdll32.dll),将其添加到项目中,然后将其输出到输出路径(或类似的路径,例如安装它),以便应用程序可以找到gsdll32.dll并加载它。

还请注意,您还将需要适当的位数