У меня не так много опыта Spring MVC. Я унаследовал некоторый RESTful кода контроллера, который находит запись в базе данных и используетВозвратите ModelAndView Spring MVC PDF-объект как сохраняемое приложение
org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView to create a PDF view of the record.
Вот метод:
@RequestMapping(value = "/profile/{uniqueId}.pdf", method = RequestMethod.GET)
@ResponseBody
public ModelAndView getProfilePdf(HttpServletRequest request, @PathVariable("uniqueId") String uniqueId {
Profile profile = getProfileByUniqueId(request, uniqueId);
Map<String, Object> reportData = buildReportData(profile);
return new ModelAndView(profileReport, reportData);
}
Есть много поддержки объектов и методы, но так как я не могу вырезать и вставить код Я оставлю их сейчас.
В этом проблема. Когда URL-адрес вызывается, PDF создается и появляется в браузере. Если я отредактирую настройки браузера, я могу получить PDF-файл в Adobe Acrobat. Но я НЕОБХОДИМО для всплывающего окна, которое спрашивает вас, хотите ли вы открыть или сохранить файл.
Я считаю, что единственный способ сделать это - установить Content-disposition в приложении.
Поэтому я добавил «HttpServletResponse ответ» на параметры метода и добавил этот код:
response.setHeader("Content-disposition", "attachment; filename=profile.pdf");
Нет удачи. Я также попытался добавить тип контента:
response.setContentType("application/pdf");
Все еще не повезло.
Мне нужно узнать, как отправить объект ModelAndView в качестве вложения файла или, возможно, преобразовать его в поток байтов и вручную передать его обратно? Никакой подсказки здесь. Любые мысли были бы весьма признательны.
Конфигурация 'JasperReportsPdfView' для использования правильных заголовков должна делать трюк. –
Хорошо, я посмотрю. Brb. – PaulG
Вид имеет свойство с именем 'headers', по умолчанию' content-disposition' устанавливается в 'inline'. Вы можете переключить его на «вложение», предоставив его жестко запрограммированным в конфигурации. Недостатком является то, что вы не можете указать имя документа, так как это также статично. –