Jasper Report нельзя экспортировать в PDF - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь экспортировать отчет о яшме в PDF, но он не работает.

это код, который я использую.
Примечание: переменная contextPathсодержит фактический контекст.Он имеет значение абсолютного пути к моему .war-файлу

C: \ Program Files \ Apache Software Foundation \ Tomcat 8.5 \ webapps \ myWarFile \

String sourceFileName = 
    contextPath + "WEB-INF/classes/report/ClsReportBean.jasper";
JasperFillManager.fillReportToFile(sourceFileName, "C://sample_report.pdf", 
    parameters, new JRBeanCollectionDataSource(lstDataSource));

проблема в том, когда я пытаюсь экспортировать отчет в PDF.Это сообщение об ошибке.

net.sf.jasperreports.engine.JRException: Ошибка при сохранении файла: C: \ sample_report.pdf.

Error part 1
Error part 2

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Я решил проблему с помощью этого кода ...

try {

   File file = new File(exportPdfPath);
        if (!file.exists()) {
            LOGGER.info("creating folder");
            file.mkdir();
            file.setWritable(true);
        }


        JasperPrint something = JasperFillManager.fillReport(sourceFileName, parameters, new JRBeanCollectionDataSource(lstDataSource));
        OutputStream output = new FileOutputStream(new File(exportPdfPath+"/test.pdf")); 
        JasperExportManager.exportReportToPdfStream(something, output); 
            output.close();

    }
0 голосов
/ 28 января 2019

JasperFillManager.fillReportToFile не генерирует PDF, а сериализированный заполненный объект отчета.По какой-то причине заполненный отчет имеет ссылку на экземпляр DefaultJasperReportsContext, который не сериализуем.Этого не должно быть, но чтобы понять, почему это происходит, нам нужно больше подробностей по делу.

Но если вы хотите создать PDF, вам не нужно сериализовать заполненный отчет.Для непосредственного создания PDF-файла вы можете сделать следующее:

JasperRunManager.runReportToPdfFile(sourceFileName, "C://sample_report.pdf", 
    parameters, new JRBeanCollectionDataSource(lstDataSource));
...