イメージやバーコードを含むPDFレポートの作成

ここ数年、イメージを含むレポートへのニーズが高まってきました。

身近な例として、社員情報シートや車の見積書に写真が入る、物件や店舗の情報に地図が付く、薬局でもらった薬にはイラスト付きで服用法が書いてある、といったものが挙げられます。また、帳票電子化の流れで、暗号化機能と組み合わせて、印鑑の画像をPDFレポートに埋め込むことも珍しくありません。

さらに、レポーティングにおけるイメージ取り込みの重要性を高めているのがバーコードです。流通業中心だった利用形態が、すべての業種に広がりました。2次元バーコードの出現により、今後も活用シーンは増えると予想されます。これらのバーコードはシステム上ではイメージとして扱われます。

JClass ServerReportは、イメージをPDFレポートに反映するために、さまざまな方法を備えています。今回の特集では、それぞれの方法の特徴とコーディングサンプル、出力結果をご紹介します。あわせて、製品同梱のGrapeCity BarCodeコンポーネントを利用したバーコードの出力についてもご案内します。

1. イメージインポート機能の概要

JClass ServerReportでは、画像データをイメージ(java.awt.Image)、またはアイコン(javax.swing.Icon)のいずれかの形式でランタイムクラスに設定し、レポートに出力します。

イメージのインポートには、大きく分けて3つの方法があります。

JCFlowへのインポート
JCFlowオブジェクトによるコンテンツ出力の過程で、文字と同じようにイメージを埋め込むことができます。文章中に絵文字を入れるなど、比較的小さなイメージを使用するのに適しています。

JCFrameへのインポート
JCFrameオブジェクトの特定の座標にイメージを設定します。ページ全体に背景画像を設定するなど、大きなイメージをレポートに出力する用途に向いています。

テーブルオブジェクトへのインポート
JCPageTableやJCFlowTableからセルのJCFrameオブジェクトを取得し、対象セルへのイメージ出力を行います。他の表コンテンツ位置と同期して座標を精密に指定可能です。

以下の項目でそれぞれの方法を説明します。

※ 各方法にはイメージ用とアイコン用のAPIが用意されています。説明およびサンプルコードではイメージ用のAPIを使用します。アイコンを使用する場合は読み替えてご覧ください。

※ サンプルコードは(製品ルート)/examples/sreport/main/のPageTable.javaに修正を加えたものです。サンプルコードで使用した画像は、以下からダウンロードできます。

サンプルコードで使用した画像(zip形式)

2. JCFlowへのインポート

JCFlowオブジェクトが管理するレポートコンテンツのフローにイメージを追加します。テキストを追加するのと同じように、行にイメージが反映されます。JCFlowへのインポートには、現在行にイメージを追加するembedImage()メソッドと、改行して新規行にイメージを追加するfloatImage()メソッドの2つが用意されています。

embedImage()メソッドを使用してイメージをJCFlowに追加するサンプルコード
JCFlow flow = new JCFlow(document);

(中略)

flow.print("これは、");

Image image = 
  Toolkit.getDefaultToolkit().getImage("JClassServerReport.gif");

flow.embedImage(image);

flow.print("JClass ServerReportのパッケージです。");

» Javaソースファイル : PageTable_1.java
» 出力したPDFイメージ : PageTable_1.png

※ 個々のパラメータや、イメージが出力先のスペースより大きかった場合の動作など、APIの詳細は、プログラマズガイド[7.6 イメージのインポート]以降とAPIリファレンスをご覧ください。

3. JCFrameへのインポート

JCFrameでは、JCFlowと同様のembedImage()やfloatImage()に加えて、以下のメソッドがサポートされています。

embedFittedImage()メソッド
現在のフレームサイズに、イメージのサイズを調整してインポートします。

embedPartialImage()メソッド
JCFrame上の現在の位置に、イメージの一部を切り取ってインポートします。

embedTruncatedImage()メソッド
JCFrame上の現在の位置に、イメージをインポートします。現在のフレームの最後に達した場合、アイテムを切り捨てます。

pasteImage()メソッド
JCFrame上の特定の座標に、イメージをインポートします。

pastePartialImage()メソッド
JCFrame上の特定の座標に、イメージの一部を切り取ってインポートします。引数でイメージ出力部分の座標を渡します。

pasteImage()メソッドを使用してイメージをJCFrameに追加するサンプルコード
JCFlow flow = new JCFlow(document);

(中略)

Image image = 
  Toolkit.getDefaultToolkit().getImage("gallery00.jpg");

JCFrame myFrame = flow.getCurrentFrame();

myFrame.pasteImage(image,new JCUnit.Point(0.5,1));

» Javaソースファイル : PageTable_2.java
» 出力したPDFイメージ : PageTable_2.png

4. テーブルオブジェクトへのインポート

JCPageTableやJCFlowTableには、getCellFrame()という、特定セルのJCFrameオブジェクトを取得するためのAPIが用意されています。 このメソッドで取得したフレームにイメージをインポートすることで、テーブルセルへのイメージの挿入が可能です。

embedFittedImage()メソッドを使用してJCPageTableのセルにイメージを追加するサンプルコード
JCFlow flow = new JCFlow(document);

(中略)

Image image = 
  Toolkit.getDefaultToolkit().getImage("JClassServerReport.gif");

JCFrame myFrame = table.getCellFrame( 3 , 2 );

myFrame.embedFittedImage( bodystyle , image , 
  JCPageTable.CELL_ALIGNMENT_CENTER , null , 
    OverflowRules.FIT_MAINTAIN_ASPECT);

» Javaソースファイル : PageTable_3.java
» 出力したPDFイメージ : PageTable_3.png

5. バーコードイメージのインポート

JClass ServerReportには、17種類のバーコード種に対応した高性能なバーコードイメージ生成コンポーネント、GrapeCity BarCodeコンポーネントがバンドルされています。BarCodeコンポーネントにバーコード種と値をパラメータとして設定するだけで、簡単に Imageオブジェクトの形式でバーコードを生成することができます。

生成したバーコードを、これまで説明してきたインポート方法のいずれかを使ってレポートに出力します。

embedFittedImage()メソッドを使用してJCPageTableのセルにバーコードイメージを追加するサンプルコード
JCFlow flow = new JCFlow(document);

(中略)

// バーコードを生成
BarCode bcd = new BarCode( Type.Code39 , "JClass" ,
  new OptionCode39( OptionCode39.TypeFullAscii ) );

JCFrame myFrame = table.getCellFrame( 4 , 0 );

try{

  // バーコードイメージをセルに出力
  myFrame.embedFittedImage( bodystyle , bcd.createImage(96) , 
    JCPageTable.CELL_ALIGNMENT_CENTER , null , 
      OverflowRules.FIT_MAINTAIN_ASPECT);

}catch( Exception e){

  System.out.println(e);

}

» Javaソースファイル : PageTable_4.java
» 出力したPDFイメージ : PageTable_4.png

まとめ : イメージの活用で顧客満足度の高い帳票表現を実現する

はじめに述べたとおり、システムで出力するレポートでイメージを使用する頻度が高くなっています。ECサイトなどを通じて、コンシューマが企業システムに直接アクセスすることも、この傾向を加速させるでしょう。

今回の特集でご紹介してきたように、JClass ServerReportには用途に応じたイメージインポートのAPIが揃っています。このAPI群と、精密な座標指定を組み合わせることで、イメージを自由なレイアウトでレポートに反映することができます。

画像や写真を組み合わせたリッチなレポートや、BarCodeコンポーネントによるバーコード出力は、ユーザー企業が競合他社と差別化をするための重要な武器になります。JClass ServerReportの特徴を、システム提案を行う際のアピールポイントとしてぜひ活用してください。