#c# #jquery #ajax #asp.net-mvc-3 #pdf-conversion
#c# #jquery #ajax #asp.net-mvc-3 #преобразование pdf
Вопрос:
Привет, я работаю над проектом Razor MVC3, и я застрял на этой проблеме уже несколько часов…
Я пытаюсь получить конвертер html в pdf для предоставления документа пользователю…
Чего я хочу, так это следующего..
Страница визуализируется и отображается. Внизу страницы должен быть маленький значок, отображающий что-то вроде загрузить в формате pdf. и в том, что это делает, заключается моя проблема..
Все данные, которые я хочу, динамически создаются в $("#content").html();
Итак, что я попробовал, так это функцию jquery / ajax, передающую $("#content").html();
в качестве параметра моей функции, которая создает pdf (работает, но я понятия не имею, как запросить созданный файл пользователю?)
Было другое решение, @(Html.ActionLink())
но я не знаю, как передать данные ($("#content").html())
по этой ссылке?
И при попытке работать с функциональностью использования конвертера для перехода по URL-адресу зашел в тупик, потому что он получил свой собственный сеанс и был перенаправлен на страницу входа..
Любая помощь была бы оценена!
Ответ №1:
Я не знаком с JavaScript, но что, если вы сначала сохраните PDF-файл во временном файле, вызвав свой метод веб-службы, а затем, после его завершения, вы сможете использовать JavaScript для перехода к URL, где сгенерированный PDF-файл будет возвращен в качестве содержимого.
Комментарии:
1. Думал об этом, но оставил его в качестве последнего варианта, потому что я бы предпочел не хранить файлы на сервере.
Ответ №2:
Поскольку XmlHTTPRequest
объект не может обрабатывать типы данных, отличные от html
, text
, json
, jsonp
и xml
, вам нужно будет перенаправить в папку pdf.
Я не уверен, что именно вы делаете в своем Ajax-запросе, но как только это будет завершено, вы можете просто перенаправить окно (Form-Action) в местоположение созданного PDF. На самом деле это не перенаправит браузер, а только предложит сохранить файл.
Комментарии:
1. $(«#getPDF»).click(функция () { var data = $(«.страница»).html(); $.ajax({ тип: «POST», url: ‘@Url.Action(«getPDF», «Core»)’, данные: «data =» data, асинхронность: false, успех: функция (данные) { } }); });
2. моей главной надеждой было иметь возможность поместить файл в заголовки ответа и таким образом его обслуживать. Но это доступно только через actionlink, и тогда я не знаю, как передать данные.
3. Вы можете просто попробовать сделать
window.open('Controller/Action/')
. Это приведет к загрузке запроса или PDF-файла в этом окне / вкладке. Просто предложение.. если это поможет вашему сценарию.
Ответ №3:
Зачем просто создавать функцию, которая возвращает созданный PDF (во время запроса ajax) в качестве результата файла, а затем устанавливать местоположение окна, указывающее на это действие, после успешного завершения запроса ajax?
Редактировать: Это означает, что вы нигде не сохраняете PDF. Итак, обходной путь заключается в том, чтобы либо использовать этот плагин для загрузки jquery, либо динамически добавлять iframe, а затем отправлять данные через него. Надеюсь, это поможет.
Комментарии:
1. Хм, звучит разумно, но как бы я это сделал? Я имею в виду, что я использую jquery для передачи данных, файл создается внутри функции, но затем он застрял там (я надеялся, что не придется сохранять файл локально).
Ответ №4:
Я нашел обходной путь, я написал расширение для моего HtmlHelper и использовал его для отображения моего элемента управления в HTML-строку вместо представления. Для этого я мог бы использовать actionlink, чтобы сказать «отобразить эту страницу» и таким образом получить все html-данные.
http://msug.vn.ua/Posts/Details/3301
Спасибо за помощь!