Ротатива - 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
После того, как я положил эти файлы, он работал как шарм
Чтобы решить проблему:
Откройте загружаемую ссылку C++ для распространяемого пакета C++ для Visual Studio 2013 ниже: https://www.microsoft.com/en-GB/download/details.aspx?id=40784 Вторично распространяемые пакеты для Visual Studio 2013
Нажмите "Загрузить" и выберите файл (vcredist_x86.exe), даже если вы используете версию 64-битного сервера.
Установите файл.
это добавит отсутствующий файл dll, упомянутый выше, и проблема теперь решена.