[無料でラクラクJava帳票作成] JasperReports使い集合
■ このスレッドは過去ログ倉庫に格納されています
JAVAで帳票作成するとなると
それなりの帳票ツールがないとテンテコ舞。
でも、帳票ツールは高い。
せっかくJavaとかTomcatとか無料で開発・運用できる環境があるのに
帳票も作りも無料でやりたいもんだ。
そんな救世主JasperReportsについて朝まで語り合いましょう。
http://jasperreports.sourceforge.net/
デザインツールiReportやJasperAssistantがなければ
ラクラクにはなりませんのでその話題も・・・。
http://ireport.sourceforge.net/
http://www.jasperassistant.com/index.html
1げっと。
>>122の続報だが、今日来たSourceForgeニューズレターによると、
11位になっていた。 detail部分は動的にレコード出力できますが、
空白行を出力することはできないですか?
例えば5行出力したいとして、2行分の動的データが
存在する場合、残りの3行は空白レコード表示とか・・・
>>128
いまいちよくわからないんだけど、次のうちのどれ?
(1) 各ページに5行出力したいが、2行の場合も残りを空白にしたい
(2) 各ページで2行出力して3行あけたい
(3) その他
>>130
普通空白にならんの?
jasperReports要素のisFloatColumnFooter属性がtrueになっているとか? >>131
空白というよりも空白行(空行?)にしたいんですよね
線は出つつも中の各項目は空という状態です。
下のようなイメージ
┌−−−−−−−−−−−−−−−−−−┐
|No |商品 |金額 |
├−−┼−−−−−−−−−┼−−−−−┤
| 1 |ああああ | 100|
├−−┼−−−−−−−−−┼−−−−−┤
| 2 |いいいい | 200|
├−−┼−−−−−−−−−┼−−−−−┤
| | | |
├−−┼−−−−−−−−−┼−−−−−┤
| | | |
├−−┼−−−−−−−−−┼−−−−−┤
| | | |
├−−┴−−−−−−−−−┼−−−−−┤
| 合計| 300|
└−−−−−−−−−−−−┴−−−−−┘ 空白分の行をつくったらえぇ。
それ以外のやり方があったらボクにも教えて。 >>132
うわっ・・・そういうことかい。
難儀なことを言うなあw
最初から、線を引いておけばいいんじゃないの?
策1: 空白データを作成する
DataSource 作成する時に、5の剰余分だけ
コレクションに空の Bean を追加する。
「空データも表示する」という業務要求だと思えば自然な処理。
策2: 罫線は Background Band で記述する
用紙に手入力するイメージに近くなる気がする。
策2はデザインが面倒なので
(高さや幅変えたくなった時に編集箇所が分散してる)
策1をお勧めするけど。 >>135
やっぱり策1の方法になっちゃいますか。
最初にその方法を考えたけど、もしかすると設定で
実現出来るのかなぁと思ったんで・・・
策1でやってみます。
SVFをいじってると頭がイライラ。
JasperReportsに戻りたいです。 subreportってデータの量が多いとdetailの大きさに合わせて伸びてしまいますよね?
これを回避するためにsubreportのサイズを固定にすることってできますでしょうか? >139
今ひとつ状況が分からず。
p1
| 他
| サブレポ
| サブレポ
| 他
p2
| 他
| サブレポ
| サブレポ
| 他
となって欲しいのに
p1
| 他
| サブレポ
| サブレポ
| サブレポ
p2
| サブレポ
| サブレポ
| 他
となることを言ってる? ----------------- detail
|他1
|サブレポ1
|他2
|サブレポ2
-----------------
のようになって欲しいのですが
サブレポ1のデータの量が多いと
----------------- detail
|他
|サブレポ1
|サブレポ1
|サブレポ1
-----------------
のようになってしまって
他2とサブレポ2がサブレポ1の下に隠れてしまいます。
聞き返したくせに放置しててすまそ。
1. 他1グループ、サブレポ1グループ、他2グループ、サブレポ2グループを作成する。
2. 他1グループの Header バンドに他1を貼り付ける。サブレポ1グループの Header バンドに(以下略)
3. Detail バンドは使用しない。
でやってみてはどうでしょうか。
詳しくは >>124 や ↓を参照。
ttp://jasperreports.sourceforge.net/tips.tricks.html#largebands 以下のようなデ−タがDBに存在した場合に
動的にセルを結合して表示する方法を
知っている人いませんか?
●DB
--------------------------
| 販売NO | 商品名 | 価格 |
|-------------------------
| 000001 | XPC | 500|
|-------------------------
| 000002 | XPC | 600|
--------------------------
↓
●帳票
--------------------------
| 販売NO | 商品名 | 価格 |
|-------------------------
| 000001 | | 500|
|--------- XPC --------
| 000002 | | 600|
--------------------------
条件としては
・重複しているセルを結合する。
・重複行数は可変で2行とはかぎらない。
・中央揃えで表示したい。
jasperreportで無理でしょうか? >143
恐らく無理。
データの持ち方を相当工夫したら結合は可能だろうけど
(上セル、下セルの値を持たせて、枠線あり・なしのセルを条件により描画する)
それにしても中央揃えとかまでは無理だと思う。 iReportの最新バージョン(1.2.0)使っている人いますか?
ダウンロードしてみたのですがメニューがすべて□□□で読ませんでした。
見当つけてツールのオプションを選択しプロパティのLANGAGEを一番下が
英語だろうと見当をつけて選択したら、メニューは英語で表示されたのですが、
まだプロバティ内には□文字が残ります。0.5.1でLANGAGE日本語で使用していた
ので日本語にしたいところなのですが、対処方法をご存知の方がいましたら
教えて下さい。 >>145
あきらめて私は1.10を使っています。
すいません、質問です。
Webアプリの帳票作成のため、
JasperReports+iReportの調査中なんですが、
これってJava側からListに入っている文字列なんかを
だらだらと表にするときってどうするんでしょうか?
BIRTも調べているんですが、同じ問題で詰まってしまって・・・。 JasperReportsは最近いじってないけど、
JRDataSourceを自分で実装すれば、
どんなデータでもだいたい対応できたよ。
で、その自分JRDataSourceの実装を
iReportのどっかで指定してやればよかったと思う。
今のJasperReportsだとJRDataSourceの実装が
いくつかすでに用意されてるようですね。
そのListの中身がMapの場合は、
JRMapCollectionDataSourceなんてのが使えそうな。
>>146
Javaからの受け渡しはMapになりますのでデータソースを
利用するしかないと思います。Listの中のデータがデータ
ベースから書き出したものなら、iReportでデータソース
を定義してSQL SELECT文を書けば良いのですが、そうでない
場合はそうできるような工夫が必要だと思います。 >>147>>148
なるほど。
一応その方法も、最初思いついたんですが、
大変そうな気がしたので、楽なメソッドとか無いかと思ったんですが。
JRDataSoursを自分で実装する方向でやってみます。
>>149
Listの中身がBeanならJRBeanCollectionDataSourceが使えるけどなあ・・・。
Beanを用意しないといかんし、Beanにコピーしなければならないのがめんどくさいけど。
>>150
JRBeanCollectionDataSourceの中身はArrayListみたいだから、
いけるかなぁ?とか思ったんですが、jxmlのコンパイルでこけているので、
それ以前の問題のようで・・・。
サンプルもそのままだとだめだし、英文でいいので資料ないですかね? >>151
JavaBeanのCollectionでなければJRBeanCollectionDataSourceは
使えないと思います。
資料は本家サイトにいくつかあります。
あと、サンプルって、ソースコードも含んだZIPファイル(jasperreports-1.2.0-project.zipかな?)
をダウンロードして展開した中にあるやつ?
151です。
>>153
しまった、それではないですね。
今日は退社してしまったので、明日試して見ます。
ありがとうございました。 151です。
サンプルを参考に、
JRDataSourceをインプリメントした独自クラスを作って放り込んだら、
うまくいきました。
ありがとうございました。 TextSS のWindowsXP(Professional)64bit化おながいします
もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? すいません、JasperReportsで1/4Pointの線を引くには
どうしたらよいのでしょうか?
もしかして_? 無理じゃなかろうか。
俺は thin で OK が出たから良かったものの
任意の数値が入れられるようにならんかな。
CSS 並の表現力とまでは言わずとも。 >>158
やはりそうですか、
無理そうなので、ソースいじって、最細の線を引けるようにして解決しました。
任意で設定できればいいのに・・・。 Open Discussion フォーラムで提議してみてはどうか。
拙い(俺だけ?)英語で盛り上げようぜ。 Java でレポート作るなら JasperReports が一番? 用途によりけりだろうが JasperReports が最適、
JasperReports で十分、JasperReports で妥協できる、
な範囲はそれなりに広いと感じる。
157氏みたいにスキルが許せば、足りない部分を付け足すことも出来るし。
試してみる価値はあるよ。オープンソースだから
気に食わなければ使わなければいい。
時間は戻ってこないが、金はかからん。 JRDataSourceをimplementsして値をレポートに渡すのは
わかったけどさらにサブレポートに値を渡すという方法がわかりません
それぞれの方法はわかるんだけど・・・
同時、というのは無理?
どこで詰まってるのか今ひとつ分からないので
もっと詳しく聞かせてもらえないだろうか。 > 167
レスありがとうです
なかなか伝えにくいんですが
1. JRDataSourceを使用した連続帳票(自動改ページ) --> 成功
2. 1. のレポートにサブレポートを追加 --> うまくできない
2. でサブレポートを追加したんだけど
Javaクラスからどうやってデータを渡したら良いかわからないのです
JRDataSourceにはサブレポートを渡せるような実装は
できないし・・・
ただサブレポートのみ、であれば
JRBeanCollectionDataSource
を使えばうまく出力できました
これを同時にできないか、というところです
たとえば
fillReportxxxxx
を2回続けて発行できれば、なんて思うけど
fillReportxxxxx(); ---> 明細マップのフィル
fillReportxxxxx(); ---> サブレポートへのフィル
あら、もしかしてこれって可能なのかな???
伝え方が悪くてすみません >>168
以前、JRDataSourceからサブレポート用のデータソースを返すようにしてうまくいった。
かなり前のバージョンのJasperRepoortsでの話だけど、
今手元にあるソースコードではだいたい以下のようになってます。
public class RootJRDataSource implements JRDataSource {
public Object getFieldValue(JRField jrField) {
String name = jrField.getName();
// some code
if (name.equals("subReport")) {
SubData subData = ...
return new SubJRDataSource(subData);
}
// some code
}
}
jrxmlの方はもうよく覚えてないので、適当に試してみて。 > 169
ありがとうございます、すごく助かります
確認してまた報告します >168
親レポートオブジェクトが子レポートオブジェクトのリストを持つような構造を定義して、
それを親の JRDataSource が返すようにする。
ではダメですか? すいません。JasperAssistantってライセンス購入必要でしょうか。 Crosstabの列名を可変にしたいとおもっています。
列名にJavaでセットする予定のパラメータを割り当てて帳票を出力してみたところ
1列目だけ値が置換されて2列目以降にパラメータ名がそのままでてしまいました。
どのようにすればよいか教えていただけないでしょうか。
連続帳票をひとしきり出力した最後のページに
別レイアウトのページを1ページ追加するような
pdfを作成することはできますでしょうか? JavaDocを調べてみたら
2つのJasperReportを作成して
JasperReport1.addPage((JRPrintPage)JasperReport2.getPages().get(0))
で出来るかな?
とメモしてみました。 まだ正式に要望があった訳ではないので試してませんが・・・
訂正:JasperPrint1.addPage((JRPrintPage)JasperPrint2.getPages().get(0)) >>174
一番てっとり早いのは、<summary>タグじゃないか? jrxmlファイルを、Linux上でAntを実行してjasperファイルにコンパイルしようとすると
以下のようなエラーになります。
java.lang.UnsatisfiedLinkError: /usr/lib/j2sdk1.4-sun/jre/lib/i386/libawt.so:
libXp.so.6: cannot open shared object file: No such file or directory
同じビルドファイルで、Windows上では正常にコンパイルできます。
antの設定等で、これを回避することは可能でしょうか? >>178
ちょっとぐぐってみましたが、AntとかJasperReportsとは関係なさそうですね。
ひょっとしたら役に立つかも・・・。
ttp://bbs.fedora.jp/read.php?FID=2&TID=364 >>179
遅レスすみません。
XWindow関連かと思い、それならAntの設定で回避できるのではと
考えていたんですが、やっぱりlibXp.so.6を入れないと無理ですかね。
jdk1.5では出ないという話もどこかで見かけた気がするんですが
それもまた影響範囲が大きい……。
入れる方向で検討します、ありがとうございました。 JVM の起動パラメータを操作可能なら、
-Djava.awt.headless=trueを指定してはどうでしょうか。
ネイティブなAWT実装を使用しなくなるため、
libawt.so に依存しなくなる、と期待したい。
詳しくはググってくれ。
現在java+iReport+JasperReportで帳票を作成しております
普通の帳票は問題なく作成できましたが
次のような行可変のテーブルが2つある場合の
帳票の作り方が解らず困っております
よろしくお願いします
[作成予定]
算数
--------------------------
| No | 名前 | 点数 |
|-------------------------
| 01 | あああ | 100 |
|-------------------------
| 02 | いいい | 80 |
--------------------------
国語
--------------------------
| No | 名前 | 点数 |
|-------------------------
| 01 | あああ | 100 |
|-------------------------
| 02 | いいい | 80 |
|-------------------------
| 03 | ううう | 70 |
--------------------------
固定文字列のしたに可変行のテーブルを表示したいと思っています
この場合どのようなグループの設定をすればよろしいのでしょうか?
またJAVA側からどんなCollectionを送ればよろしいのでしょうか?
よろしくお願いします。
科目ごとのグループにすればいいんじゃない?
グループごとに票を分けるのはサンプルをごらんあれ 一つの科目に限れば普通の帳票になるので、
それを Subreport とした帳票を作ってはどうか。
/demo/samples/subreport とか参考にして。
AddressReport.jrxml ← 全科目帳票
ProductReport.jrxml ← 科目別サブレポート
にそれぞれ対応すると思えばいい。 >>183,184
ご意見ありがとうございます、やってみます。 時給1000円でJava教えてくださるかたを募集します
場所 所沢(池袋・高田馬場から直通)
i−want−to−study−java@hotmail.co.jp
(アドレスは全角で書いてあるので半角に直してください)
よろしくおねがいします 明細が2列のレポートを作成した場合、最終ページが2列目で終了すると
空白ページが差し込まれるという現象が発生するんですが何か対策はないでしょうか?
サブレポートを使用してサブレポート内で2列明細を使用した場合も同じような
感じです。 117 から数レスほど読んで、該当しなければ
もう少し詳しく説明してみるヨロシ。
あと列じゃなくて行だよね。 2列というのは、jasperreportタグのcolumncountを2にした場合の事です
2列目で終了した場合、サマリーバンドを新しいページで追加しようとしているようです 失礼しました。
段組はやったことないのでなんとも。。
Forum を 「columnCount blank」で検索すると
・サマリーバンドを高さ0にする。
・サマリーバンドを消す。
・サマリーバンドのprintWhenExpressionにBoolean.FALSEを指定する。
など書かれてるようですが、
2003年頃から言われてて2006年でもごにょごにょやってるんで
完璧なバグフィックスはされてないのかも知れないですね。
よう分からんです。 時給1000円でJava教えてくださるかたを募集します
場所 所沢(池袋・高田馬場から直通)
よろしくおねがいします
i−want−to−study−java@hotmail.co.jp
教える対象は超初心者です。
専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
仕事でJasperReportsを使ってPDF出力をやるって話になっているのですが、
調べてもわからない事が多いので質問をさせてください。
●やりたいこと
iReportを使って1人分の雛形を作っておいて
1つPDFファイルの中に人数分同じ雛形を動的に作成したい。
調べている途中なので変なソースかもしれませんが
にしてあります。
これで単純に同じ1つの雛形を作っておけば1つのPDFファイルの中に同じ雛形のデータが2つできるのかなと
思っていたのですが、上書きをされてしまって1つ分のデータしか出来ません。
実現方法がわからないので何かアドバイスがあったらお願いします。
※ソースは後述 String filename = "sampleReport";
JasperPrint jPrint = null;
JasperReport jReport = JasperCompileManager.compileReport("sampleReport.jrxml");
Map parameters = new HashMap();
for (int i=0;i<2;i++) {
jReport = JasperCompileManager.compileReport("sampleReport.jrxml");
parameters.put("ReportTitle", "タイトル");
parameters.put("name", "名前");
parameters.put("affiliation", "会社名");
parameters.put("initiation", "2006/05/01");
parameters.put("portrait", getImageFile("images\\Sunset.jpg"));
jPrint = JasperFillManager.fillReport(jReport, parameters, (JRDataSource)null);
jPrint.setLocaleCode(Locale.JAPANESE.toString());
jPrint.setTimeZoneId(TimeZone.getDefault().toString());
}
JasperExportManager.exportReportToPdfFile(jPrint, filename + ".pdf");
jrxmlの isTitleNewPage="true"
isSummaryNewPage="true">
のようにしています。 for の囲いを取り払って、fill してる行を以下の4行にしたらどうなります?
JRDataSource dataSource = new JRBeanArrayDataSource(
new Object[10]
);
jPrint = JasperFillManager.fillreport(jReport, parameters, dataSource); font.propertiesで指定している論理フォントを埋め込みたいんだけど
どういう風に指定すればいいか、誰か知っていたら教えてください。 テストサーバと本番サーバで、
フォントの入ってるディレクトリのパスが違うので
それが解決できればいいんだけど、
それには論理フォント指定が出来ればいいかなと。
少なくとも、ネットで見つかるフォントの埋め込みをやってるサンプルは
どれもフルパスで指定してたので、
そうではなく相対パスで指定したいと思ってます。
プロパティファイルを読みこんでくれればそれでも解決なんだけど。
サンプルにあったFontってのが、なんだかそれっぽい事をしてたけど
真似しても上手くいきませんでした。
ただ、font.propertiesとかいじったの初めてなので、サーバ設定の方が悪いのかもしれない……。 >197
サンプル見てみたけど、FONT_MAP に put してる
フォントオブジェクト作成する際の物理フォントのファイルパスを
プロパティファイルか何かで取得するようにすれば
それで用件が満たせそうな気がする。
・デザインファイル(*.jrxml)は一つ
・コンパイル済みデザインファイル(*.jasper)は一つ
・プログラムは一つ
・プロパティファイルは開発用と本番用の二つ
実際に試してみてないのでこれで行けるとは断言できんけど。
>それっぽい事
具体的にどんな事をしたんでしょうか。 >>198
それは、jrxmlからjasperを作るときに、プロパティファイルを読み込んで
値を変更するって事でしょうか。
そうではなくて、jasperからプロパティファイルを読み込ませる方法があるのかな?
それっぽいことと言うのは、
今、サンプルも自分のソースも手元に無いから詳細は違うかもしれないけど。
確かサンプルの方では、fontNameがSerif、
pdfFontNameがフォント名(Times New Romanだったかな?)
になってる部分があったと思います。
また、Serif等の論理フォント名はfont.propertiesを見て決めていると
Linux上の日本語フォントの扱いを調べていて知りました。
なので、上記の構成を真似て
font.propertiesのSerifにマッピングするフォントを日本語TrueTypeフォントに変更し、
fontNameにSerif、pdfFontNameに使用した日本語フォントの名前
(Windowsで、ダブルクリックした時のフォント画面で表示される名前)を
設定した、のだったと思います。
しばらく前の記憶を頼りに書いているので、詳細は違うかも。 > それは、jrxmlからjasperを作るときに、
> プロパティファイルを読み込んで値を変更するって事でしょうか。
そうっす。
開発用・本番用のプロパティファイルの振り分けは
ant とかでやればいいだけの話なんで
これで困ることはないと思うんですよ。
FontApp.java で
> FontKey key = new FontKey("sansserif", false, true);
(中略)
> exporter.setParameter(JRExporterParameter.FONT_MAP, fontMap);
って部分があって、ここで sanserif を COMICBD.TTF にマップしてると思われ。
で、作成される PDF の sansserif 指定されてる部分が
愉快なフォント(COMICBD.TTF)になってる、と。
font.properties から引っ張ってくるところを
プログラム側から上書きしてるイメージ。
FONT_MAP を *.jrxml 内部で指定できるかどうかは
ちょっと試してみないと分からないです。 >>200
レス遅くなってすみません。
それでやってみます。
他にも何かやり方がありそうだったら、また報告します。 ttp://www.thinkit.co.jp/free/tech/4/4/1.html
のサンプルを試そうとしたら
JasperReport jasperReport =
JasperCompileManager.compileReport(templatePath);
で
java.lang.NoClassDefFoundError:
org/apache/commons/digester/SetNestedPropertiesRule
が発生しました。
このクラスはどこにあるのですか。 >202
です。
自己解決しました。
TomcatPlugin内のDevLoader.zipを解凍して
Tomcatのlibフォルダに入れることで解決しました。
ですが、次は
java.lang.NoClassDefFoundError:
org/apache/commons/javaflow/bytecode/Continuable
が発生してしまいました。
解決方法を教えてください。 >>203
NoClassDefFoundErrorが起こっているクラスのパッケージ名から、
どのライブラリが欠けているか、想像できない?
<チラシの裏>
それにしても、Commons JavaFlowなんてものがあるのか・・・。
そしてJasperReportsで使ってたのか・・・。
</チラシの裏> >>202-203
どういう環境でやろうとしてるのか良く分からないけど、要するに
jasperreports.jarだけをlibに突っ込んで帳票を出そうとして、
NoClassDefFoundErrorが出たところだけ順番に潰しているという前提で。
> TomcatPlugin内のDevLoader.zipを解凍して
まずここからして解せない。そんな事する必要は無いはずなんだが。
それに、Tomcat自体のlibフォルダに、特定のモジュール用のファイルを入れると、
いずれ他のモジュールとバッティングして混乱するからやめた方がいいぞ。
それと、一つずつ聞いていくと、君はこのスレであと5回ぐらい質問する事になる。
まず、
ttp://sourceforge.net/project/showfiles.php?group_id=36382&package_id=28579
ここでjasperreports-1.2.5-project.zipを落として来るといい。
そして、その直下の「lib」ディレクトリの中から
あとはNoClassDefFoundErrorが出ているパッケージ名に、名前が似てるjarを探して
Tomcatではなくモジュールのlibディレクトリにコピーしろ。
全部コピーすれば一発で動くが、要らないjarまで入るから鬱陶しい。
1つ入れては動かして、次のNoClassDefFoundErrorを確認して……って手順でやれば
jasperReports自体は、確か7つぐらいのjarで動く。 書いてから気づいた、TomcatPluginって
eclipseからTomcat立ち上げるための設定なのかな?
そうだとしたらスマソ、中段はちょっと的外れだったかも。 ┌──────────┐
│┌───┐┌───┐│
││リスト││リスト││
││ ││ ││
││ ││ ││
│└───┘└───┘│
└──────────┘
こんな感じの帳票を作りたいんですが、
どうすればできますでしょうか。 ずれまくってる・・・
1枚に明細が2つある帳票です。 左の明細と右の明細は同じ構造?(段組なのか、違う構造を並べるのか)
段組ならサブレポートのサンプルがまさにそんな感じ。
違う構造並べる場合は、高さ調整とかどうなるのか分からない。 >>209
回答ありがとうございます。
同じ構造でいいです。
ご指摘のサンプルを動かしてみましたが、
サブレポートが表示されないんですが。
レポート実行時のDIRをどう指定しても表示されません。 ちょっとレスの内容と違うが、
帳票って知ってる人って少ないと思わない? ついに1000体突破かよ
アイロボットみたいだな
株ロボもいつか夢を見るようになるのかなぁ 外字を含むデータを出力することは出来るのでしょうか。 外字使うフィールドと通常文字使うフィールドが分かれてるなら出来る。
同一フィールドに混在させるなら制限付きになりそう。
絶対に使わないコードポイントを外字に割り当てて、
かつ、そういうフォントを用意する、とか。 iReportのeclipseプラグインがリリースされてた。
rmi使ってeclipseからiReportや新規ウィザードを起動させてるみたいなんだけど正常に動かない(><)
試された方います? XLSで出力するときに、印刷範囲の指定って出来ますか?
JExcelAPIのSheetSettingで設定できるというところまでは調べたのですが、
JasperReportsからアクセスするメソッドが見当たらないんです。
やっぱりJExcelAPIを単独で呼び出すしかないんでしょうか。 簿記の正式な書式って結構うるさいけど、
その正式な帳簿として出力含めてできますか? レコードを横方向に伸びる形で表示することは簡単にできますか? ■ このスレッドは過去ログ倉庫に格納されています