#java #jasper-reports
#java #jasper-отчеты
Вопрос:
Я использую библиотеку JasperReports 5.6.0
Я устаю программировать:
ПРОСМОТРЩИК (JRViewer) PDF —> XML —> ПРОСМОТРЩИК PDF (JRViewer)
- шаг — экспорт сгенерированного представления raport в XML-файл
- шаг — экспортированный файл xml преобразуется в PDF и отображается JRViewer
Но у меня проблема с шагом 2,
// file is variable xml file generated from step 1
JasperDesign design = JRXmlLoader.load(file);
JasperReport report = JasperCompileManager.compileReport(design);
JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), new JRBeanCollectionDataSource(b));
JasperPrintManager.printReport(print, false);
Я получил сообщение об ошибке:
java.lang.NullPointerException
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:323)
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:284)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:273)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:218)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:202)
at pl.opencare.wydruki.PrintFunctions$1.actionPerformed(PrintFunctions.java:460)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
Ответ №1:
Шаг кода 1:
// p is my report
JasperPrint p = ..........
StringBuffer xml = new StringBuffer();
JRXmlExporter xmlExporter = new JRXmlExporter();
xmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, p);
xmlExporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, xml);
xmlExporter.exportReport();
File file = File.createTempFile("temp", ".xml");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(xml.toString());
bw.close();
Файл не пуст, я могу показать его временную директорию.
на шаге 2 сбейте ошибку java.lang.Исключение NullPointerException, netbeans показывает строку
JasperDesign design = JRXmlLoader.load(file);
Ответ №2:
Единственный способ, которым я вижу, что эта ошибка может возникнуть, — это если файл, используемый в JRXmlLoader.load(file), был каким-то неправильным (скорее всего, пустой или иным образом неправильный файл .jrxml). Если это так, ваш не описанный «первый шаг» должен содержать ошибки.
@Ответ с подробностями (я думаю, что редактирование вопроса было бы более подходящим форматом для предоставления более подробной информации о вопросе)
И есть проблема. Я не знал, что у вас был экземпляр JasperPrint, который представляет уже заполненный отчет. Согласно документации JRXmlExported, при экспорте создается файл .jrpxml, который можно снова проанализировать как экземпляр JasperPrint с помощью JRPrintXmlLoader. Попытка загрузить заполненный отчет как JasperDesign для его повторного заполнения может привести к ошибкам (и, по-видимому, это так). Есть ли какая-либо конкретная причина, по которой вы не можете работать с файлом .jrxml или экземпляром JasperDesign, используемым для создания отчета?