支柱を使用してプロジェクトを作成していますが、JasperIReportsの使用に問題があります。いくつかの情報を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を確認しましたが、すべて正常に機能しています。
私はJasperReportsの初心者であり、PDFにコーディングしているので、ここで何をしているのかについて最小限の考えしか持っておらず、明らかに私のコードはネットのどこかからコピー/貼り付けされていると推測できます。 。
OutputStreamの代わりにPrintWriterを使用して、バイトを文字列に変換し、PrintWriter.append(String)メソッドを使用しようとしましたが(文字列はCharSequenceではないと考えられます)、PDFにデータを抽出しません。
また、PrintWriterを取得し、それを閉じてOutputStreamを開く(機能しなかった)か、フラッシュする(どちらでもない)ことを試みました。
pdfでデータを表示する可能性のあるoutを使用するためのソリューションに関するヘルプは素晴らしいでしょう。どうもありがとう!