PDFアダプタ

PDFアダプタは次の手順で利用します。

  1. Adobe Acrobat(有償ソフトウェア)を利用して、PDFフォームファイルを作成します。
  2. SkyOnDemand上でスクリプトを作成します。

以下でそれぞれについて説明します。

PDFフォームの作成

Acrobatを利用してPDFフォームを作成します。
配置したフィールドをダブルクリックするとフィールドの名前を変更することができます。この名前欄の値は後でスクリプトで値を設定する際に利用しますので、重要です。

ここでは例として、次のような簡単な納品書のPDFを想定します。

  • ヘッダーとして、「お客様名」があります。
  • 明細として、「品名」「数量」があります。
  • 明細は1ページ目には10明細まで配置できます。

この場合、次のようにフィールドを配置します。ここでのポイントは明細フィールドに付ける名前です。明細の1行目のフィールドには[1]を、2行目には[2]というように、1から始まる添字を付けてください。なお名前はすべて半角文字で付ける必要があります。

フィールドフィールドに付ける名前(例)
ヘッダーの「お客様名」CustomerName
明細1行目の「品名」Item[1]
明細1行目の「数量」Qty[1]
明細2行目の「品名」Item[2]
明細2行目の「数量」Qty[2]
 : :
明細10行目の「品名」Item[10]
明細10行目の「数量」Qty[10]

スクリプトの作成

できあがったPDFフォームにForm.pdfという名前を付けて保存し、SkyOnDemandのエクスプローラーを使って/data/pdfsampleにアップロードします。
また、PDFに出力するデータを同じ場所にCSVで用意します。必要なCSVは次の2つです。(説明を容易にするために、簡易的なCSVとしています。)

  • customers.csv ・・・ お客様名が1行だけ入ったCSVです。
  • items.csv ・・・ 明細が「品名,数量」の形式で格納されたCSVです。

できあがりのスクリプトは次のようになります。

「ヘッダー書込」の設定は次の通りです。鍵となるのは次の4点です。

  • 「フォーム」には、ひな形となるPDFフォームを設定します。
  • 「出力先」には、ヘッダーの値をセットした一時ファイルの出力場所を設定します。
  • 「入力スキーマ定義」にPDFフォームに配置したヘッダーフィールドの名前を設定します。
  • 「レコードセットの種類」は「単一行」を選択します。

「ヘッダーmapping」は次のように設定されています。

「明細書込」の設定は次の通りです。鍵となるのは次の4点です。

  • 「フォーム」には、ヘッダーの値をセットした一時ファイルを設定します。
  • 「出力先」には、明細の値をセットした最終ファイルの出力場所を設定します。
  • 「入力スキーマ定義」にPDFフォームに配置した明細フィールドの名前を設定します。
  • 「レコードセットの種類」は「複数」を選択します。この設定をすることで、入力データに自動的に添字が付与されます。つまり、入力データの1行目が添字[1]のフィールドにマップされ、2行目が添字[2]のフィールドにマップされます。
  • 「拡張」タブで「PDFフォームをファイナライズ」にチェックを入れることで、これ以上フォームとして使えない状態にします。

「明細mapping」は次のように設定しています。

以上で、スクリプトの実装は完了となります。

複数ページのPDFを出力する場合

たとえば、全2ページのPDFを出す場合は、基本的には次のような方法になります。

(1) 2ページ目のPDFフォームをAcrobatを使って作成します。その場合のフィールド名は、前述の例でいいますとItem[1]、Qty[1]のように添字は[1]から始まるように作成します。

(2) 「PDF書き込み」アイコンは3つ使用します。前述のとおり、1つめのアイコンは1ページ目のヘッダー出力、2つめのアイコンは1ページ目の明細出力を行います。3つめのアイコンで2ページ目の明細出力を新たに設定します。

(3) 3つめのアイコンに次の設定を行います。

  • 入力データフロー(黄色の線)は2つ目のアイコンと同じMapperから引きます。
  • 「拡張設定」タブの「読み飛ばすレコード数」に、1ページ目の明細数をセットします。たとえば1ページ目に10行出力済みの場合、「読み飛ばすレコード数」は10に設定します。これによって入力データの11行目から2ページ目に出力されます。
  • 「PDFフォームにファイナライズ」をONに設定します。

(4) できあがった1ページ目と2ページ目を「PDF結合」アイコンを利用して、結合します。