Я столкнулся с полезным кодом генерации PDF, чтобы показать файл клиенту в приложении Spring MVC ( "Возвращение сгенерированного PDF файла с помощью Spring MVC" ):
@RequestMapping(value = "/form/pdf", produces = "application/pdf")
public ResponseEntity<byte[]> showPdf(DomainModel domain, ModelMap model) {
createPdf(domain, model);
Path path = Paths.get(PATH_FILE);
byte[] pdfContents = null;
try {
pdfContents = Files.readAllBytes(path);
} catch (IOException e) {
e.printStackTrace();
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/pdf"));
String filename = NAME_PDF;
headers.setContentDispositionFormData(filename, filename);
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(
pdfContents, headers, HttpStatus.OK);
return response;
}
Я добавил объявление о том, что метод возвращает PDF файл ( "Spring 3.0 Java REST return PDF document" ): produces = "application/pdf"
.
Моя проблема заключается в том, что при выполнении приведенного выше кода он немедленно просит клиента сохранить файл PDF. Я хочу, чтобы файл PDF просматривался первым в браузере, чтобы клиент мог решить, сохранять его или нет.
Я нашел "Как получить PDF-контент (обслуживаемый с помощью метода контроллера MVC Spring) в новом окне" , который предлагает добавить target="_blank"
в теге формы Spring. Я тестировал его и, как и ожидалось, показал новую вкладку, но снова появилось приглашение сохранения.
Другой "Я не могу открыть .pdf в моем браузере с помощью Java" , чтобы добавить httpServletResponse.setHeader("Content-Disposition", "inline");
, но я не использую HttpServletRequest
для выполните мой PDF файл.
Как я могу открыть PDF файл на новой вкладке, учитывая мой код/ситуацию?