Не удается конвертировать PDF в любой формат изображения на C # с помощью Imagemagick

#c# #.net #imagemagick #ghostscript #file-conversion

#c# #.net #imagemagick #ghostscript #преобразование файлов

Вопрос:

это мой первый вопрос, поэтому, пожалуйста, не будьте ко мне слишком суровы 🙂 В любом случае, давайте перейдем прямо к этому:

Для приложения мне нужно преобразовать файл PDF в файл изображения (конкретный формат не имеет значения, но предпочтительно png или jpg). Чтобы это сделать, я пытаюсь использовать ImageMagick, но когда я пытаюсь что-либо преобразовать, он выдает ошибку. Теперь, после некоторых исследований, я пришел к выводу, что мне нужно установить Ghostscript, который я попытался получить из менеджера пакетов NuGet, интегрированного в Visual Studio 2017. В любом случае, когда я пытаюсь установить указанный пакет, он выдает следующую ошибку:

Не удалось добавить ссылку на ‘gsdll32’, чтобы добавить ссылку на ‘gsdll32’. Описание кода серьезности: Подавление строки файла проекта> Ошибка состояния. Пожалуйста, убедитесь, что файл доступен и что это допустимая сборка или COM-компонент.

Я пытаюсь выполнить это с помощью Visual Studio 2017 с C #. 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:

Да, GhostScript лицензирован таким образом, что люди не включают его в свои обертки / nugets. Вам нужно убедиться, что у вас есть dll.

Обычно вам приходится загружать его ( gsdll32.dll ), добавлять в проект и выводить в свой выходной путь (или что-нибудь подобное, например, установить), чтобы ваше приложение могло найти gsdll32.dll и загрузить его.

Также обратите внимание, что вам также понадобится соответствующая разрядность

Комментарии:

1. Спасибо за быстрый ответ. Я скачал Ghostscript напрямую прямо сейчас, и он действительно поставляется с gsdll32.dll. Когда я пытаюсь добавить его в качестве ссылки (щелкнул правой кнопкой мыши ссылки в обозревателе решений и добавил его в качестве ссылки), но это выдает ту же ошибку, что и раньше. Я довольно новичок в этом уровне программирования, так где я могу найти этот путь вывода? И, наконец, с разрядностью, я полагаю, вы имеете в виду x32, x64 и т.д.?

2. @MelvinWinthagen начните с простого помещения dll в выходной каталог, посмотрите, работает ли это

3. Хорошо, если предположить, что выходной каталог C:UsersMelvinsourcereposFacturconversietestFacturconversietestbinDebug он по-прежнему выдает ту же ошибку. Я также пытался загрузить версию x64, но это также выдает ту же ошибку. Помещение его во вложенную папку dll также не дало результатов, к сожалению

4. Быстрое обновление: я нашел другой api, который также предлагает необходимую мне функциональность, поэтому я буду использовать его сейчас. Но спасибо за ваше время!