JasperReports 6 で PDF を作り、ブラウザーで表示する (6)

← (5) 日本語が出力できるようにする ~PDF にフォントを埋め込む編~

目次

★おまけ★ スタイルを一括指定する

帳票レイアウト上の個々の要素に、同じスタイルを 1 つ 1 つ設定していく作業が、若干面倒くさく感じると共に、スタイル変更が発生した時に、また同じ作業をするのもウンザリかと。そんな時は、まず帳票レイアウト自体にスタイル定義を作成し、各要素に対して定義済みのスタイルを適用することができます。こうすることで、スタイルをまとめて管理できます。HTML に対する CSS とちょっと似てるかな。

帳票レイアウトをソース モードで表示し、<jasperReport> 要素の子要素として <style> 要素を追加します。そして、各スタイル項目 (フォントや文字揃えなど) を、属性で設定します。例えば以下の様な感じ。

name 属性は、スタイルに対して適当な名前をつけています。isDefault 属性は、このスタイルが、帳票のデフォルトのスタイルであるということを表しています。つまり、この帳票においては、個別の要素に対して設定を行わない限り、ここで指定されたスタイルが適用されます。style 属性は、継承元スタイルの名前を指定しています。

ちなみに、<style> 要素を定義する位置は、XML スキーマーで厳密に定められているため注意。<property> 要素、<import> 要素、<template> 要素、<reportFont> 要素、<style> 要素、…の順番で定義しないと、怒られます。

<style> 要素に対して指定可能な属性については、こちら。

スタイル定義を設計モードで行う方法はわかりませんでした。ご存知のかたおられましたら是非教えて下さい。

後は、個々の要素に対して、上で定義したスタイル名を指定していきます。

create-pdf-by-jasperreports6-and-java_ks0641zp

もちろん、スタイルを指定した上で、個々の要素に追加で設定を行うことも可能です。<style> 要素で統一的なスタイルをまとめて定義しておき、細かい部分は個々の要素に対して設定、というのがいい感じ。

■ただし…

帳票レイアウト ファイルを保存したタイミングで、「vAlign=”Middle”」の部分が勝手に「vTextAlign=”Middle” vImageAlign=”Middle”」に書きかわっとる!しかも!!その状態でプログラムを実行したら、

「net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lcvc-complex-type.3.2.2: 要素’style’に属性’vTextAlign’を含めることはできません。」だってさ。教えてくれなくても知っとるよ。っていうか余計なもん入れるな。

JasperReport のエディターの不具合なのかもしれませんね。ちなみに、jrxml ファイルを単なるテキスト エディターで開いて、「vTextAlign=”Middle” vImageAlign=”Middle”」の部分を「vAlign=”Middle”」に戻して保存したら、例外が出ずにちゃんと動くんよね。なんだろ。これ。

KPDN

プログラミングとゲームが好きな、しがないにゃんこ好きです。わんこも同じぐらい好きです。最近、物忘れどんどんが酷くなってきた。

コメントを残す