Невозможно разрешить пользователю загружать PDF из веб-приложения - PullRequest
1 голос
/ 12 мая 2011

Это контроллер класса

@Controller
public class ReportController {
    @RequestMapping("/reports.htm")
    public void onSubmit(ModelMap map, HttpServletResponse response) {

        PayrollService ps = new PayrollServiceImpl();

        JRBeanCollectionDataSource jr = new JRBeanCollectionDataSource(ps.listAllLoans(), false);
        try {
            JasperPrint jp = JasperFillManager.fillReport(new FileInputStream("C:\\Documents and Settings\\Administrator\\workspace\\payroll\\WebContent\\WEB-INF\\payrollReports\\report2.jasper"), null, jr);
            JRExporter jre = new JRPdfExporter();
            jre.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "report.pdf");
            jre.setParameter(JRExporterParameter.JASPER_PRINT, jp);

            ServletOutputStream output = response.getOutputStream();
            jre.setParameter(JRExporterParameter.OUTPUT_STREAM, output);
            jre.exportReport();

            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Когда я запускаю это, открывается диалоговое окно с просьбой загрузить файл reports.htm. Когда я открываю файл, я получаю это

%PDF-1.4 %âãÏÓ 3 0 obj <>stream xœ+är á26S°00SIár á
!

ä2Rð ‰ '01RÉåÒw3T0²Ò¸44C² @ jJ's'5Z ~ [ë ™ т € т € å <Ò¹4¼ <R <@ (¤c1,: H§ € ƒÇCs3C <Ö~êè * XX ~ (8л. С. 7Е endstream endobj 1 0 obj <> / Parent 4 0 R / Содержание 3 0 R / Type / Page / Ресурсы <> / Font <>>> / MediaBox [0 0 595 842] >> endobj 5 0 obj [1 0 R / XYZ 0 854 0] endobj 2 0 obj <> endobj 4 0 obj <> endobj 6 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> / Pages 4 0 R >> endobj 9 0 obj <> endobj xref 0 10 0000000000 65535 f 0000000220 00000 n 0000000487 00000 n 0000000015 00000 n 0000000574 00000 n 0000000453 00000 n 0000000624 00000 n 0000000677 00000 n 0000000708 00000 n 0000000810 00000 n прицеп << 9f3f4526709d5e33fd22d07da10c3883>] / Информация 9 0 R / Размер 10 >> startxref 976 %% EOF

Но когда я сохраняю файл и открываю Adobe PDF, я получаю правильный PDF. Как я могу скачать reports.pdf вместо reports.htm?

1 Ответ

4 голосов
/ 12 мая 2011

Установите заголовки Content-Disposition и Content-Type, чтобы указать браузеру, как обращаться с ресурсом.

response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=\"report.pdf\"");
...