カスタム検索

2009年4月28日火曜日

Grailsで帳票!JasperReport 出力編

めずらしく引き続きJasperReportです。
今回は jasper ファイルから pdf を出力します。

ざっくりコードから!

def report="sample.jasper"
def ds=new JRXmlDataSource("http://localhost:8080/jasper/book/xmllist","/list/book")
def print = JasperFillManager.fillReport(report,[:], ds)
def pdf=new File("test.pdf")
JasperExportManager.exportReportToPdfFile(print,pdf.getAbsolutePath())


reportに帳票ファイルのパスを指定(File型は使えないので注意)

今回はXMLを読み込むのでデータソースにJRXmlDataSourceを作成、前回アクションでxmlを生成するようにしたので、そのURIと、データの基準となるxpathを指定

JasperFillManager.fillReport でレポートファイルと、帳票パラメーター(今回はなしなので空のマップ)、データソースを渡して JasperPrint を作成します。

JasperExportManager.exportReportToPdfFile で出力先のファイルを指定して実行

これでPDFが出力されます。
小さな帳票だったら爆速です!(BIRTと比べて)
ブラウザに表示したい場合は JasperExportManager.exportReportToPdf でPDFのbyte配列がかえるので、これをストリームに返してやればOKです(contentTypeとかはちゃんとセットしてね)

1 件のコメント:

shizuku777 さんのコメント...

同様のやり方で実施しましたが、空のPDFが出てしまいます。
def print = JasperFillManager.fillReport(report,[:], ds)
この部分を、
def print = JasperFillManager.fillReport(report,[:], new JREmptyDataSource())
に置き換えてやるとデータソースから取得する値を除いて正常にPDF出力されます。
データソースの読み込み部分がおかしいのでしょうが、よくわかりません。fillReportの第2引数は[:]で良いですか?