Ротатива - ViewAspdf не работает на сервере

Я знаю, что эта тема обсуждалась в нескольких статьях, но ни одно из решений не помогло мне.

У меня есть это действие:

   public ActionResult DownloadViewPDF(string userId)
        {
            var model = db.MyCvs.FirstOrDefault(u => u.UserId == userId);

            if (model != null)
                return new Rotativa.ViewAsPdf("ViewUserCv", model) { FileName = model.FirstName + model.LastName + "_CV.pdf" };
            return Content("there is no Cv to download");
        }

Используя вышеупомянутое действие, я загружаю представление в формате PDF, и на моем компьютере все работает как положено.

После развертывания проекта на сервере это действие не работает, возвращается ошибка:

Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информация о происхождении и местоположении исключения может быть идентифицирована с помощью трассировки стека исключений ниже.

Я использую Visual Studio Community 2015. На сервере у меня есть Rotativa.dll а также папка в корневом каталоге с именем Rotativa с файлом внутри с именем wkhtmltopdf.exe,

Я не знаю, как справиться с этой ошибкой, можете ли вы дать мне несколько предложений?

4 ответа

Решение

Я нашел очень простое руководство, как исправить мою проблему с rotativa, для тех, у кого такая же проблема, пожалуйста, следуйте этому руководству:

Пример процесса создания PDF с Rotativa в Asp.Net MVC

основываясь на этом уроке, все что нам нужно сделать, это:

Загрузить DLL:

  • msvcp120.dll
  • msvcr120.dll

потому что Ротативу нужен компонент "Распространяемый Visual C++ для Visual Studio".

C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Packages \ Debugger \ X64 \ msvcp120.dll

C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Packages \ Debugger \ X64 \ msvcr120.dll

 You can refer above path on your local with your own specified path to find it.
 Upload them to "Rotativa" folder.

Я столкнулся с той же проблемой: Rotativa работал для меня на локальном компьютере, но не на нашем сервере разработки.

Для меня сработала комбинация ответов Люсьена Бомба и Рэя Леврона.

Сначала я зашел по адресу: https://wkhtmltopdf.org/downloads.html и скачал 64-битную версию.

Я запустил установщик, нашел папку bin и скопировал эти три файла в папку "Rotativa" моего проекта:

  • wkhtmltoimage.exe
  • wkhtmltopdf.exe
  • wkhtmltox.dll

Затем я нашел эти четыре DLL-файла на моем компьютере, где выполнялся поиск, и скопировал их в папку "Rotativa" моего проекта:

  • msvcp120.dll
  • msvp140.dll
  • msvcr120.dll
  • vcruntime140.dll

Убедитесь, что все файлы были добавлены в управление проектом и исходным кодом, протестированы локально и зарегистрированы для сборки на dev.

То, что работало для меня, было то, что у меня отсутствовали файлы в папке Rotativa,

help-wkhtmltoimage.txt
help-wkhtmltopdf.txt
msvcp120.dll
msvcp140.dll
msvcr120.dll
vcruntime140.dll
wkhtmltoimage.exe
wkhtmltopdf.exe
wkhtmltox.dll

После того, как я положил эти файлы, он работал как шарм

Чтобы решить проблему:

  1. Откройте загружаемую ссылку C++ для распространяемого пакета C++ для Visual Studio 2013 ниже: https://www.microsoft.com/en-GB/download/details.aspx?id=40784 Вторично распространяемые пакеты для Visual Studio 2013

  2. Нажмите "Загрузить" и выберите файл (vcredist_x86.exe), даже если вы используете версию 64-битного сервера.

  3. Установите файл.

это добавит отсутствующий файл dll, упомянутый выше, и проблема теперь решена.

Другие вопросы по тегам