ブログ

【LiveCycle Designer】S3の画像をPDFへ!Java×XMLでの動的埋め込みガイド

この記事をSNSでシェア!

はじめに

SAPを扱うプロジェクトにおいて、帳票開発の要件でAdobe LiveCycle Designer(以下、LiveCycle Designer)に触れる機会がありました。本記事は、そのプロジェクトを通じて得た実践的な知見をまとめたものです。

帳票作成の現場では、製品写真やバーコード、さらには署名といった画像を、データの状態や条件に合わせて動的に表示させたいというニーズが非常に多くあります。特にLiveCycle Designerを活用したPDFフォーム開発では、データバインディングの仕組みを使って外部データを効率的に取り込むのが一般的です。

本記事では、Amazon S3から取得した画像データをBase64形式にエンコードし、XMLデータとしてLiveCycle Designerへ受け渡して表示させる具体的な実装手順を解説します。

サーバーサイドでの実装(Java, Node.js, Python等)

この手法のポイントは、画像をファイルとして直接参照するのではなく、「Base64」というテキスト形式に変換した上でXMLデータの一部として埋め込む点にあります。

① S3からバイナリデータを取得

S3 SDKを利用し、対象の画像ファイル(.jpg, .png等)をバイナリデータ(ストリームまたはバイト配列)として読み込みます 。

② Base64エンコード

取得したバイナリデータをBase64文字列に変換します。Java 8以降であれば、標準のjava.util.Base64クラスを使用するのが効率的です 。

// 例としてバイナリデータをバイト配列で用意(S3から取得したバイト配列を想定)
byte[] binaryData = { 0x01, 0x02, 0x03, 0x04, 0x05 };

// Base64エンコーダを取得
Base64.Encoder encoder = Base64.getEncoder();

// バイナリデータをBase64文字列に変換
String base64String = encoder.encodeToString(binaryData);

System.out.println("Base64 Encoded String: " + base64String);

③ XMLデータの作成

エンコードした文字列を、XMLのノードに格納します。

ここでのコツは、画像データをXML要素のテキストノードとして直接格納することです。特別な属性(attribute)を定義する必要はありません。

<formData>
  <employee_photo>
    /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBg... (Base64文字列が続く)
  </employee_photo>
  <name>山田太郎</name>
</formData>

LiveCycle Designerでの設定

次に、作成したXMLデータを受け取って表示するための設定を行います 。

① 画像フィールドの配置

「ライブラリ」から「画像フィールド (Image Field)」を選択し、フォーム上の表示したい場所へドラッグ&ドロップします 。

LiveCycle Designerでの画像フィールド配置

② データ連結の設定

挿入した画像フィールドを選択し、「オブジェクト」タブを開きます。
画像が伸びたり縮んだりするのを防ぐため、サイズ調整の設定で「画像の縦横の比率を維持」を選択しておくのがおすすめです。

LiveCycle Designerでのデータ連結設定①

「連結」サブタブを選択します。

LiveCycle Designerでのデータ連結設定②

「データ連結」で、先程の手順で作成したXMLノード(例:employee_photo)を指定します。

LiveCycle Designerでのデータ連結設定③

以上のステップで、S3上の画像をPDF帳票へ自由に出力できるようになります。
今回は、業務での利用シーンが非常に多い「バーコード画像」を使って検証してみました。

PDF出力例

終わりに

この手法により、外部システムで生成・管理されている静的コンテンツ(今回はバーコード画像)を動的にフォームに埋め込むことができます。
外部システムとの連携と聞くと、最初は少し身構えてしまうかもしれません。ですが、実際に取り組んでみると、仕組み自体はとてもシンプルでスムーズに実装できることが分かりました。今回はJavaでの実装例をご紹介いたしましたが、私自身JavaでXMLデータを生成する処理の実装自体が初めてでしたので、「LiveCycle Designer」「XMLデータ」「Javaでの実装」の3つの関係が複雑に感じていましたが、コツを掴めばシンプルに実装ができるかと思います。今回のテーマである画像のバインディングも、「Base64エンコードしてしまえば、あとは通常のテキストデータと同じ」という点さえ押さえれば、驚くほどすんなり実装できるはずです。
S3をクラウドストレージとして採用するプロジェクトは多いかと思います。ご紹介した手法がお役に立てれば幸いです。

投稿者プロフィール

竹内 祐輝
竹内 祐輝
これまで、SalesforceやAWS,SAPといったサービスに触れてきました。
現在はSAP BTPのプロジェクトに携わっております。

業務で得た知識や経験を発信してきますのでよろしくお願いいたします。
この記事をSNSでシェア!