Я создаю проект со стойками, и у меня проблема с использованием Jasper IReports. Я хочу экспортировать некоторую информацию в файл PDF, и я продолжаю получать java.lang.IllegalStateException: getOutputStream() уже был вызван... Исключение из-за открытия ServletOutputStream в моем коде, когда страница уже открывает PrintWriter.
Код находится в модели (поэтому он не в jsp, а в java-файле), как следует:
public void handle(HttpServletResponse res, Connection connection, String path)throws Exception{
ServletOutputStream out = null;
try {
JasperDesign jasperDesign = JRXmlLoader.load(path);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, null, connection);
res.setContentType("application/pdf");
res.setContentLength(bytes.length);
out = res.getOutputStream();
out.write(bytes, 0, bytes.length);
} catch (Exception e) {
e.printStackTrace();
} finally {
out.flush();
out.close();
}
Я проверил соединение, путь и HttpServletResponse, и все работает нормально.
Я очень новичок в Jasper Reports, а также в кодировании материалов в PDF, так что вы можете правильно предположить, что у меня есть минимальное представление о том, что я здесь делаю, и что, очевидно, мой код копируется/вставляется откуда-то через сеть. .
Я пытался использовать PrintWriter вместо OutputStream, преобразовывая байты в строку и используя метод PrintWriter.append(String) (хотя это не String, а CharSequence), но он не извлекает данные в PDF.
Я также пытался получить PrintWriter, закрыть его, чтобы открыть OutputStream (не сработало) или сбросить его (ни то, ни другое).
Любая помощь с решением для использования любого выхода, который может отображать данные в формате PDF, была бы отличной. Большое спасибо!