- - PR -
JasperReportのSubreportがないとエラーになる。
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2005-03-17 19:37
稲葉と申します。
現在 WindowsXP SP2, JDK-1.4.2_06, JBoss 3.2.6, Struts 1.1, JasperReport 0.6.4, iReport 0.4.1, で開発しています。 iReport上でサブリポートを含んだ帳票をデザインし、iReport上では問題なくデータを 含んだPDFが表示されます。 作成したrptParent.jasper,rptChild.jasperを/pages/report/にコピー。 public class PrintReport extends Action { public ActionForward execute(.....){ //formからデータの取り出し。 //jasperFile - location & name of the .jasper file String jasperFile=getServlet().getServletContext().getRealPath( "/pages/report/rptHtlRQ.jasper"); //parameters - hash map, but no parms were set Map map = new HashMap(); Context ctx=new InitialContext(); final DataSource ds=(DataSource)ctx.lookup("java:/DefaultDS"); Connection conn=ds.getConnection(); bytes =JasperRunManager.runReportToPdf(jasperFile,map,conn); ここでJRException: Could not load object from location : rptChild.jasperとエラー になります。 rptParent.jrxmlでは <subreportExpression class="java.lang.String"> <![CDATA["rptChild.jasper"]]> </subreportExpression> としています。 解決法や解決へのポインタを示して頂きたいのですが、よろしくお願い致します。 |
|
投稿日時: 2005-03-18 09:45
こんにちは。 iReport上では問題なく動いているという事でしたので、私の勘違いかも しれませんが、実際に私がリリースしたソースを見たところjrxmlは以下の 様になっていました。 <subreportExpression class="net.sf.jasperreports.engine.JasperReport"> <![CDATA[$P{SubReportSourceContainer}.getReportSources("xxxxx")]]> </subreportExpression> あと少し気になるのはパスの指定方法が親と違う様なのですが問題ありませんか? 検討違いでしたらすみません。。 |
|
投稿日時: 2005-03-19 17:25
ありがとうございます。
原点に返り、JasperReportのdemo/sample/webapp以下をJBOSS_HOME/postgres/deploy にコピーし、JasperReport.warへ名前を変更。 <subreportExpression class="net.sf.jasperreports.engine.JasperReport"> [CDATA[$P{rptChildParam}]] </subreportExpression> としたrptParent.jrxml,rptChild.jrxmlをJasperReport.war/reports/へコピー。 JasperReport.war/jsp/のcompile.jspを変更し、上記ファイルをコンパイル。 pdf.jspもDB Connection部分を追加し、 rptParentを呼ぶ前にchildを File subRptFile=new File(application.getRealPath("/reports/rptChild.jasper")); JasperReport subreport = (JasperReport)JRLoader.loadObject(subRptFile) map.put("rptChildParam",subreport); と親を呼ぶ前にロードしてパラメータで渡すと問題なく表示できました。 しかし、JBoss+Strutsの環境で実行するとファイルサイズはある程度あるpdfファイル が出来るのですが、空白ページが上記で出来たファイルと同数ページあるのみで何も 表示されません。 引き続きよろしくお願い致します。 |
|
投稿日時: 2005-03-19 19:08
iTextのTutorialにアプリケーションサーバの中にはサーバー上ではちゃんとしたpdfを作成
するが、ブラウザに返すときにバイナリでうまく返せないものがある。 サーバ側のpdfとクライアント側に保存したpdfを比較してみろとあったので、やってみました。 結果はサーバ側に保存したpdfは問題ないレポートでしたが、クライアント側に返って きていたのは空白ページだけでした。 結論として、JBoss-3.2.6では直接pdfを返せないとわかりました。 |
|
投稿日時: 2005-03-19 20:09
こんにちは。
私もあまり理解していないので恐縮ですが、私のJava Web Startの環境で テストしてみたところ問題なくpdfファイルをクライアント側に直接戻す事が できました。(サブレポートの中身も表示されています) byte[] pdf = JasperExportManager.exportReportToPdf(jasperPrint) 環境がJava Web Startなのでstrutsでは試していませんが、 ByteArrayOutputStream byteArrayOutputStream response.setContentLength(byteArrayOutputStream.size()); ServletOutputStream servletOutputStream = response.getOutputStream(); byteArrayOutputStream.writeTo(servletOutputStream); この様な感じで同じ様にbyte arrayを戻せないでしょうか? ちなみにテストした環境はjboss3.2.3です。3.2.6の問題でしょうか? 検討違いでしたらすみません。。 [ メッセージ編集済み 編集者: matu 編集日時 2005-03-19 20:23 ] |
1
