我正在使用 struts 创建一个项目,但在使用 Jasper IReports 时遇到问题。我想将一些信息导出到 pdf 文件中,并且不断收到 java.lang.IllegalStateException:getOutputStream() 已被调用...当页面已经打开 PrintWriter 时在我的代码中打开 ServletOutputStream 导致的异常。
代码在模型中(所以它不在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) 方法(allthought is not String is CharSequence),但它不会将数据提取到 PDF 中。
我还尝试获取 PrintWriter,关闭它以打开 OutputStream(不起作用)或刷新它(两者都没有)。
任何关于使用任何可以在 pdf 中显示数据的解决方案的帮助都会很棒。非常感谢!