トップページ⇒tech
314コメント125KB

[無料でラクラクJava帳票作成] JasperReports使い集合

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
JAVAで帳票作成するとなると
それなりの帳票ツールがないとテンテコ舞。
でも、帳票ツールは高い。
せっかくJavaとかTomcatとか無料で開発・運用できる環境があるのに
帳票も作りも無料でやりたいもんだ。

そんな救世主JasperReportsについて朝まで語り合いましょう。
http://jasperreports.sourceforge.net/

デザインツールiReportやJasperAssistantがなければ
ラクラクにはなりませんのでその話題も・・・。
http://ireport.sourceforge.net/
http://www.jasperassistant.com/index.html


1げっと。
0249デフォルトの名無しさん2008/07/14(月) 15:29:38
>>248
ずーっと 出来てますよ。(っても触りだしたが2.0.xからだけど
この間3.0.0に上げたけど問題なく出来てます。

環境は
ウェブアプリ、全体的には EclipseRCP×HttpInvoker なんだけど
PDFの出力だけ内部ブラウザからアクセスさせてるから
Jasper部はウェブアプリ

僕がサブレポートで躓いたときは
「サブレポート表現」に絶対パスを渡すのがミソだった
0250245&2482008/07/14(月) 22:28:17
>249さん
確認ありがとうございます。
それと原因わかりました。作成していたサンプルはサブレポートにデータソースもなにも
ないレポートをつけていたのですが、そうだと表示されないみたい。
Tutorial SWFのサブレポートを真似してDB(レポートクエリ)からデータをとってくるように
したらサブレポートが表示されました。
実際は、Java(Webアプリ)から配列で情報を渡して配列の内容を一覧してくれるような
サブレポートを作りたいのですがどうしたらよいか・・・。もうちょいサンプルをググって見ます。
ともあれ、サブレポートの動作確認はできました。有難うございました。
0251デフォルトの名無しさん2008/07/15(火) 14:58:55
参考までに

jrxml側
1.サブレポートに渡す為のパラメータを追加
(例:パラメータ名:summary、 パラメータクラスタイプ:net.sf.jasperreports.engine.JRDataSource

2.サブレポートのプロパティに1.で作成したパラメータを設定
(例:サブレポートタブの「接続/データソース表現」で「データソース表現の使用」を選択して $P{summary} と書き込む

java側
3.パラメータに データソースを "summary"でぶち込む
List list = new ArrayList();
...
JRBeanCollectionDataSource ds4mainreport = new JRBeanCollectionDataSource(list);
JRBeanCollectionDataSource ds4subreport = new JRBeanCollectionDataSource(list);
Map param = new HashMap();
param.put("summary", ds4subreport);
JasperPrint print = JasperFillManager.fillReport
("somewhere/some.jasper", param, ds4mainreport);

こんな感じかな?
0252251 2008/07/15(火) 15:00:29
>>251
メインとサブで 同じデータソース(list)になっちゃってるけど気にするなwww
0253デフォルトの名無しさん2008/07/22(火) 17:24:32
環境を0.6.7から2.0.5にバージョンアップを試行中なのですが
2.0.5にしたらcompileReportToFileでjrxml→jasperにプリコンパイルすると
次のようなエラーが出てしまいます。

net.sf.jasperreports.engine.design.JRValidationException: Report design not valid :
 1. Warning : Element bottom reaches outside band area : y=30 height=11 band-height=39
 at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:260)
 at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:144)
 at it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:591)
 at java.lang.Thread.run(Thread.java:595)


どうやらバンド領域をはみ出したエレメント(表示項目)があるとこのような
エラーが出るようです。0.6.7でははみ出してもプリコンパイルも表示もうまく
いっていたのですが・・・。
元々なぜバンド領域をはみ出してレイアウトしているかを説明すると長くなるので
割愛させていただきますが、現状のままバージョンアップをしたいと考えています。
何か回避方法はありますでしょうか?
0254デフォルトの名無しさん2008/07/25(金) 06:37:54
>>253
無理だと思います。

割愛している必要性の部分が想像できないので代替方法の提案もできないです。
02552532008/07/26(土) 00:27:26
無理でした。

throwしている部分をソースを修正し強引に回避してcompileReportToFileはとおるようにしましたが
表示ができませんでした。

それで結局はみ出さないようにレイアウトを変更することで解決しました。

0.6.7ではdetail部分に表示する表のヘッダ(タイトル部)をpageHeaderにレイアウトしたとき
表のヘッダの罫線をpageHeaderからdetailにはみ出さないとヘッダと明細の表の罫線がうまくくっ付かなかったので
線をくっ付けるにははみ出さないとダメというjasperreportsの仕様だと思ってました。
でも本来の仕様は2.0.5が正しいということなのですね。

失礼しました。
0256デフォルトの名無しさん2008/07/28(月) 16:17:29
本家サイトにアクセスすると

ランタイムエラーが発生しました。
デバッグしますか?
行:nnn
エラー:'s'は宣言されていません。

となるよぉ
0257デフォルトの名無しさん2008/07/29(火) 02:09:10
>>256
ウザイよね。

リニューアルしてから、iReportのEclipseプラグインのアップデートサイトがつながらないのが困る。
フォーラムに同じ質問投げてる人いるけど、回答なし。
0258デフォルトの名無しさん2008/08/01(金) 14:32:23
JasperReport + iReport + JAVA で連続帳票の出力について
イメージ
プリンター: EPSON VP-1850 (ドットプリンター)
      連続用紙を使用

・横長指定の出力をした場合
 プリント イメージ が90度回転した形で出力されてしまいます。

・JAVA で縦長を指定した場合
 iReport で横長指定をしている物をJAVA(jasper)側で、縦長指定している為に
 イメージの後ろが切れてしまいます。(当然ですが)
 JAVA SOURCE
 HashPrintRequestAttributeSet attribute = new HashPrintRequestAttributeSet();
attribute.add(OrientationRequested.PORTRAIT); // たて
// 出力
exportJasperReport(template, attribute, vo, DOWNLOAD_FILE);

・ちなみにCANON ページプリンター(レーザー)では、正しく出力します。

お手数ですが、JasperReport で連続帳票を出力経験のある方いらっしゃいましたら
ご教授お願いいたします。


iReport ページサイズの指定
   幅: 29.940
  高さ: 17.780
用紙向き: 横長
0259デフォルトの名無しさん2008/08/05(火) 13:56:01
>>258
attribute.add(OrientationRequested.LANDSCAPE);
ではどう?

或いはプリンタの設定で90度回転とか?
0260デフォルトの名無しさん2008/08/05(火) 18:32:42
>>259
回答ありがとうございます。
返信遅くなりました。
attribute.add(OrientationRequested.LANDSCAPE);
を指定した場合。
プリント イメージ が90度回転した形で出力されてしまいます。

attribute.add(OrientationRequested.PORTRAIT);
を指定した場合。
 iReport で横長指定をしている物をJAVA(jasper)側で、縦長指定している為に
 イメージの後ろが切れてしまいます。

プリンターの回転についてですが、プリンタードライバーに回転が見当たらず
ハード側(プリンター本体)からの指定が分からず調査中です(指定がなさそう)
プリンター: EPSON VP-1850 (ドットプリンター)
      連続用紙を使用

今回はありがとうございました、また良い案がありましたら
アドバイスおねがいします。
0261デフォルトの名無しさん2008/08/06(水) 14:01:29
iReportのウィンドウメニューで「左右に並べて表示」と「上下に並べて表示」が
実際の動作と逆転していて混乱しませんか?
JasperBabylonで管理されてるんでしょうか?
誰か直して(指摘して)くれるとありがたいです(´・ω・`)
02622592008/08/06(水) 23:13:51
>>260
ん!>>258で「90度回転した形で出力されてしまいます。」
出力時に90度戻せばOKだと思ったんだけどそうじゃないの?

現状の用紙の方向と印字の向きがよくわからないよ。
0263デフォルトの名無しさん2008/08/28(木) 19:02:04
複数の表示エレメントに同じ条件の<printWhenExpression>を設定したい場合
どこかに条件を定義してそこを参照することってできないですかねぇ

条件を修正することがあると全部直さなきゃいけない
0264デフォルトの名無しさん2008/08/29(金) 01:27:53
条件判定の真偽値を変数として定義しといて、
printWhenExpression でその変数参照するようにするとか?

http://jasperforge.org/uploads/publish//jasperreportswebsite/JR%20Website/jasperreports_tutorial.html#Variables
0265デフォルトの名無しさん2008/08/29(金) 23:40:56
>>264
なるほど。目から鱗です。

て実装方法がピンとこないけど試行錯誤してみます。
02662632008/09/02(火) 22:08:20
・・・
ページが変わったときに変数を更新するにはどうしたら・・・
と心配していましたが、試行錯誤することなくアッサリとできました。
さんくすでした。

しかし、pageheader、pagefooterバンドのところで1ページ目だけに
表示するように条件式を入れたんですが、pageheaderバンドだけ
どうしても2ページ目にも表示してしまい断念しました。

バージョン0.6.7だからかなぁ。
0267デフォルトの名無しさん2008/09/03(水) 00:52:31
>>266
どんな条件で表示判定しようとしてる?
incrementType とか設定してる?
0268デフォルトの名無しさん2008/09/03(水) 19:57:26
>>267
<variableExpression>と<initialValueExpression>に
[new Boolean($V{PAGE_NUMBER} == 1)]を
resetTypeは"Page"にしてその他は何も設定していません。(iReportのデフォルト)
0269デフォルトの名無しさん2008/09/04(木) 04:52:54
症状として、
・1ページ目には表示されている。
・2ページ目の pageHeader に表示、pageFooter に非表示
・3ページ目以降はどちらも非表示
で、2ページ目の pageHeader のみおかしいと。

pageHeader 表示の判定で、variable が評価されるタイミングが、
$V{PAGE_NUMBER} がインクリメントするタイミングより早いとか?
pageHeader/pageFooter 使わずに
group の header/footer 使ったら、評価の順序が調整されるかも。
まるっきり希望的観測ですけど。
0270デフォルトの名無しさん2008/09/04(木) 19:26:14
>>269
症状はそうです。
3.0.0でやっても同様の動作でした。

1帳票に同じ条件のprintWhenExpressionが最大40箇所あって
Variablesでなんとかなれば動作的にも若干軽くなるところなのですが・・・
とりあえずVariablesでのフラグ化はあきらめておとなしく全部の項目に条件式を入れました。

さんくすした。
0271デフォルトの名無しさん2008/09/05(金) 01:55:57
役に立てなくてすまんかった。

ところで、今更でもうしわけないんだけど
Integer を引数にして Boolean を返す static メソッド持つ
適当なクラス作って、クラスパス通しといて
printWhenExpression の中でそのメソッド呼ぶのが
手っ取り早かったかも知れない・・・
Variables と違って評価順も明快だろうし。

動作的に軽く云々はまた別の話かも。
0272デフォルトの名無しさん2008/10/24(金) 10:55:08
JDK1.5、Eclipse3.2でjasperReports2.0.5使ってます。
携帯からの書き込みのため、正確でない部分がありましたらすみません。

数種類の帳票をexportReportToPdfStreamで作成してますが、同じページ数でもデータ量の多い帳票は、このメソッドですごく時間がかかってしまいます。

開発環境がAMD Sempron1GHz、メモリが1.5GHz、JVMのオプションでメモリの最小最大とも512MHzを指定していますが、600ページ程のPDFにするのに15分、場合によってはOutOfMemoryErrorで作成できないことがあります。
上記メソッド実行中、CPU100%になります。

速度とメモリエラーとCPU100%になるのを改善したいです。
アドバイスいただけないでしょうか?
02732722008/10/24(金) 11:15:25
さっそくメモリの単位間違えてました。
Hzじゃないですね。すみません。
0274デフォルトの名無しさん2008/10/29(水) 08:02:43
フィールドの背景をjavaで動的に変更したいのですが
なにかいい方法はあるでしょうか
アドバイスよろしくお願いします。
0275デフォルトの名無しさん2008/11/13(木) 11:59:44
>>272
亀レスだが

直接ファイルに出力する(FileOutputStream)とか、
パイプする(PipedOutputStream)とか、

あとは中身みてみないとわかるわけないね。

>>274
背景に使う画像ファイルのパスを変数にすればおk
0276デフォルトの名無しさん2008/11/20(木) 07:48:23
275さん、ありがとうございます。
自分の説明不足で申し訳ありません。
フィールドの背景色を動的に変更する方法はないですしょうか
02772752008/11/23(日) 14:29:45
>>276
書き込んだ後、そうかなーって思ったwww

ちょっと調べてみたけど、情報みつかんない。
本家のフォーラムに同じ事やりたいって書いてある人にレスついてないし

無理矢理やるとすれば、未コンパイル(jrxml)のままファイルを置いておいて編集してからコンパイルするってのが出来るかもしれないけど、非現実的だな

あとは、できあがったPDFを編集するとかかなー

Jasperreportsだけじゃ無理っぽいス
0278デフォルトの名無しさん2008/11/28(金) 09:39:53
JasperReportsに限った話ではないと思いますが
例えば発注書を作成するとして
長い品名があるとき皆さんはどう対応してますか?

やむを得ず印字できるところまでであきらめますか
それともデータを加工して改行したりしてますか
0279デフォルトの名無しさん2008/11/28(金) 12:54:17
自分で考えろ
0280デフォルトの名無しさん2008/12/01(月) 18:22:05
>>278
大抵、jakarta commons で省略する

一回だけタックシールの印刷の時に全文字はいるようにフォントサイズの調整をした事があるなー
VB6だったけど。
0281デフォルトの名無しさん2009/02/19(木) 12:05:49
3.0.0で特定のキー項目をレポートグループとして定義し、「新規ページで開始」にしてあります。
さらに「ページ番号のリセット」にもチェックを付けておけば
$V{PAGE_NUMBER}(評価時間:今すぐ)がグループ中ページ番号、
$V{PAGE_NUMBER}(評価時間:レポート)がグループページ数という扱いになりますが、
全体のページ番号・ページ数も同時に表示させたい場合にはどうすればよいでしょうか?

イメージとしては以下のような感じです。
グループ:1 グループページ:1/2 ページ:1/6
  〜改ページ〜
グループ:1 グループページ:2/2 ページ:2/6
  〜改ページ〜
グループ:2 グループページ:1/3 ページ:3/6
  〜改ページ〜
グループ:2 グループページ:2/3 ページ:4/6
  〜改ページ〜
グループ:2 グループページ:3/3 ページ:5/6
  〜改ページ〜
グループ:3 グループページ:1/1 ページ:6/6
0282デフォルトの名無しさん2009/03/05(木) 22:44:18
日本語のイタリック、ボールドが効きません。
なにか方法ありますか?
0283デフォルトの名無しさん2009/03/17(火) 03:09:50
パチもんのことをバッタもんと言わないでください
パチもん→コピー商品
バッタもん→倒産した会社から安く買い叩いた正規品
0284デフォルトの名無しさん2009/03/17(火) 05:24:35
Excelで言えば
パチもん→OpenOffice
バッタもん→秋葉原でガイジンが売ってる緑のCDのExcel
ということか。

で、誤爆は何になるんだ?
0285デフォルトの名無しさん2009/04/18(土) 21:42:31
>>282
もう解決しているかもしれんが、
HeiseiKakuGo-W5,Bold
HeiseiKakuGo-W5,Italic
でおk
0286デフォルトの名無しさん2009/05/17(日) 07:17:22
>>261
  ∧,,∧
 ( `・ω・) ウーム…ここは?
 / ∽ |
 しー-J
0287デフォルトの名無しさん2009/07/21(火) 10:57:11
POIでのExcelファイル出力で、
漢数字フォーマットの数値セルって不可能?

日本語版Excelは"[DBNum1][$-411]G/標準"みたいにして
漢数字フォーマットを扱えるんだけど、
POIのHSSFDataFormatは"[DBNum1]"に対応してない気がするんだが。。。
0288デフォルトの名無しさん2009/09/28(月) 13:50:56
iReport3.0.0/pdf出力がしたいです
サブレポートを使った帳票を作成しています。
mainのdetailにサブレポートを指定していますが、
出力した時に、インデントがずれて右よりになってしまいます。
レイアウト上はサブレポートもdetailの左端に揃えているのですが…。

解決方法はありますでしょうか。
0289デフォルトの名無しさん2009/10/01(木) 03:06:14
サブレポート側で上下左右のマージン潰してある?
0290デフォルトの名無しさん2009/10/02(金) 10:12:25
>>289
余白「0」設定してませんでした。。。
無事、揃えて出力ができました。
ありがとうございます。

すいません。さらに別件で質問です。
グループ指定についてです。
一覧表で、「ユーザー名」または「登録日」の
どちらか一方が変わるごとに、金額合計を表示したく、
「ユーザー名」と「登録日」の2つのグループを作成し、
各フッターに「一覧合計」の欄を設定しました。
しかし、「ユーザー名」と「登録日」の両方が同時に変わると
一覧合計が2つ表示されてしまいます。

上記の場合は、一覧合計の表示は1つで良いのですが、
そのためにはどのように設定したらよろしいでしょうか。
0291デフォルトの名無しさん2009/11/26(木) 22:54:50
>>290
亀だけど、ユーザ名と登録日を結合したフィールドを使えば良いかと

用紙サイズの違う2つの単票をJasperPrint1.addPage((JRPrintPage)JasperPrint2.getPages().get(0))
で、1つのPDFファイルにまとめています。
1ページ目はA3、2ページ目はA4のようにiReportで指定した用紙サイズで印刷したいのですが
2ページ目もA3になってしまいます。
設定方法をご存知の方教えてください。
0292デフォルトの名無しさん2010/02/04(木) 22:34:25
Webアプリと帳票出力処理(JasperReport)が別サーバの場合、
画面からの同期処理でPDFするには、どういう方法がいいですか?
0293デフォルトの名無しさん2010/02/14(日) 10:13:00
アプリから別サーバに投げて、その結果をアプリが返せば良いんじゃない?
0294デフォルトの名無しさん2010/02/14(日) 12:04:07
具体的な実装方法は?
0295デフォルトの名無しさん2010/02/14(日) 13:47:05
HTTPでもなんでもいいじゃん。
0296デフォルトの名無しさん2010/02/14(日) 17:39:44
webサービスだな
0297デフォルトの名無しさん2010/02/25(木) 11:58:41
JasperReports3.5.3で自動改行できないのですが、自動改行のためのプラグインなどが必要なのでしょうか?
0298デフォルトの名無しさん2010/02/26(金) 05:07:02
3.5.3固有の挙動なのか、そうじゃないのかが分からないので、
JasperReports 使ったことがほとんどないならそう書いた方が
適切な回答が期待できると思う。

後者だと仮定して、
stretch with overflow を指定しない場合、
確保した矩形領域分しかテキストは出力されませんよ。
02992972010/02/27(土) 21:03:42
>>298
ありがとうございます。
stretch with overflowを設定したら解決しました。

JasperReportsは勉強始めたばかりです。
「JasperReports 3.5 for Java Developers」という参考書に掲載されていた
サンプルコードをそのまま利用したけど、実行結果が違ってて悩んでいました。

サンプルコードにはstretch with overflowの設定は書かれていませんでした、
参考書のコードが間違っていたようです。
0300デフォルトの名無しさん2010/03/03(水) 04:48:33
その本は読んだことないので推測になりますが、
最初の一歩的な例として、細かい話はあえて省略してるのかも。
0301デフォルトの名無しさん2010/04/18(日) 18:39:10
ページリセットでどうやるんですか?
0302デフォルトの名無しさん2010/06/12(土) 02:25:29
JasperPeports と言うよりは、iText に関する質問になるかも知れません。
スレ違いでしたらすみません。

花園フォントまたは花園明朝OTを PDF に埋め込みたいと考えています。

JDK7 の M3 から Unicode 5.1 に対応しているそうですが、IVS を使った異体字の PDF 出力を試した方はいらっしゃいませんか?
一応、テキストファイルとしてなら異体字が正しく出力できていることを Windows7 のメモ帳などで確認しているのですが、PDF への埋め込みには成功していません。
なお、開発環境は、JDK7 build95、iReport 3.7.3(JasperReports3.7.3/iText2.1.7) です。

または、JasperReports を使って、CID コードを直接指定して CID フォントを PDF に出力することが可能かどうかご存じな方はいらっしゃいませんか?
0303デフォルトの名無しさん2010/07/28(水) 17:42:13
JasperPeportsで色々試して、結果 FastPDFGenで解決ってことになりました。
0304デフォルトの名無しさん2010/07/28(水) 18:42:22
理由は?
0305デフォルトの名無しさん2010/07/28(水) 18:49:32
あ、302が結局無理だったのか
0306デフォルトの名無しさん2010/08/03(火) 19:54:52
iReport 3.7.4
Java: 1.6.0_20; Java HotSpot(TM) Client VM 16.3-b01

上記の環境で帳票を作成し、完成した帳票をJasperServerCEに登録、PHPで用意した画面から
SOAPを通してJasperServerのrunReportを呼び出しって感じで運用しようとしております。
ちゃんと帳票自体は表示されるのですが、EXCEL出力しようとすると全然ダメに・・・

帳票の中の表を、iReportのTextFieldとStaticテキストにstyleで枠線を付け、これを組み合わせて
表現しているのですが(つまり、セルの集合で「表」を表現してます)、EXCEL形式で出力すると
罫線が全部消えてしまうのです
iReportのPreviewを使って表示すると罫線までちゃんと出るのに、何故ブラウザから表示すると
ダメなのか・・・大分調べたのですが原因不明です。

どなたか、ご存知の方いらっしゃいましたらよろしくお願いします。
03073022010/09/04(土) 13:48:22
規制を食らって書き込めませんでした。

>>303 は私ではありません。

半ば諦め気味ですが、相変わらず試行錯誤してます。
花園フォント側で尋ねた方がいいのでしょうか...
0308デフォルトの名無しさん2010/11/18(木) 11:47:06
iReport3.6.1で帳票作成してます。

このスレをざっと流し読みしてて、ついさっきBackground Bandの存在を知りました。
羅線をBackgroundに描けたらいいなと思っているのですが、位置合わせがめんどくさいです。

Backgroundはデザイン時にPage HeaderやDetail等と重ねて表示出来ないのでしょうか?
0309デフォルトの名無しさん2010/12/28(火) 17:08:59
定期あげ
0310デフォルトの名無しさん2011/02/09(水) 21:53:06
A4縦の用紙でラベル印刷用に2列×5行の帳票レイアウトを作成しました。データソースはJDBCです。
フェッチしたデータ
Data1, Data2, Data3, Data4
上記データを例えばレイアウトの2番目の位置からセットしたいのですがやり方が分かりません。
下記のように出力したいのですが、PDF生成時にパラメータで印字開始位置を指定する方法はないのでしょうか?

[ブランク][Data1]
[Data2][Data3]
[Data4][ブランク]
[ブランク][ブランク]
[ブランク][ブランク]
0311デフォルトの名無しさん2011/02/09(水) 21:58:03
age
0312デフォルトの名無しさん2011/04/30(土) 13:45:01.19
iReportで画像埋め込むのどうすればよいでしょうか?
どこにもそれっぽいアイコンが見当たりません
0313デフォルトの名無しさん2011/04/30(土) 14:24:39.97
>312

パレットにありました。すいません。
0314デフォルトの名無しさん2011/08/15(月) 17:29:07.76
iReport-nb-3.6.1使用しています。
JasperReportsに限ったことではありませんが。。。

作成したPDFをページ表示させず、
クライアントの「通常使うプリンタ」で印刷させる方法はないでしょうか?

■ このスレッドは過去ログ倉庫に格納されています