Comments
Description
Transcript
チュートリアル - 株式会社ワン・オー・ワン
株式会社ワン・オー・ワン チュートリアル Version 1.5 Note: コピー並びに配布厳禁 内容は予告なく変更される場合があります Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 目次 概要 ...................................................................................................................... 1 1. PDF を利用した帳票出力 ............................................................................... 2 1-1. 概要 ..................................................................................................... 2 1-2. PDF ファイルの準備 ........................................................................... 2 1-3. プロジェクトの編集 ............................................................................ 4 1-4. HTML の修正 ...................................................................................... 4 1-5. インタラクティブな PDF の表示 ........................................................ 5 1-6. 動作確認.............................................................................................. 7 1-7. 文字化けの対応 ................................................................................... 8 Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 概要 このチュートリアルでは、101NEO Studioの基本的な使い方、機能等について理解された方 を対象としております。 具体的には、チュートリアル 第1部および第2部を実施している方を対象としており、このチ ュートリアルでは、第2部にPDFを利用した機能を追加します。 1-1-1. システム要件 チュートリアル 第2部をすべて確認するためには次のシステム、設定が必要です。 • JDBC対応データベース(説明ではOracleを使用) • 使用するデータベースにあわせた101NEO Studioのクラスパス設定 • メールサーバー(3章にて使用) • Java Mail (mail.jar) と JFA (activation.jar) 及びクラスパス設定 • WebブラウザでCookieをブロックしない設定(セッション管理で使用) 上記にあわせて、このチュートリアルでは次のシステム(製品)が必要です。 • Adobe Acrobat (PDFフォームを設定したPDFファイルを作成する場合) PDFフォーム作成の可能な製品版のAcrobatが必要です。ですのでAcrobat6.0 の場合 は Professionalが必要になります。この文書ではAcrobat5.0を使用しております。 • インターネットにアクセス可能な環境 (PDFファイルをローカルに持たない場合) Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 1 1. PDFを利用した帳票出力 1-1. 概要 101NEOでは、PDFと連携してインタラクティブな文書を作成することが可能です。 チュートリアル 第2部の「4-4. 注文データ確認アプリケーション」にPDFでの帳票出力を追 加します。 Adobe Acrobatのフォーム機能を使用するとPDF内に入力領域やチェックボックス、ボタンな どを配置したテンプレートが作成できます。そのテンプレートPDFに101NEOを使って動的に 値を設定する方法を説明します。 この機能を活用することで、データ毎にPDFを作成する必要がなくなり、帳票が必要なシス テム等では効率良くリソースを使用することが可能になります。 1-2. PDFファイルの準備 帳票用のPDFファイルを準備します。インターネット上のPDFファイルをそのまま利用する場 合には、こちらのステップは必要ありません。 1-2-1. PDFの作成 PDFファイルの作成はいろいろな方法がありますが、ここではAcrobat 5.0を使用してExcelか らPDFを作成します。 図 1-1. Excelでの帳票作成 上図のような帳票イメージをExcel上で作成し、「Adobe PDFへの変換」ボタン をクリックします。 「PDFファイルに名前をつけて保存」ダイアログが表示されますので、任意のファイル名にて 保存してください。 Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 2 1-2-2. PDFフォームの作成 「1-2-1」で作成したPDFファイルをAcrobatで開きます。 図 1-2. PDFファイル フォームツールにて下記のようなPDFフォームを作成し、保存します。 図 1-3. PDFフォームの作成 Note: PDF フォームの作成方法について詳しくは Adobe Acrobat のマニ ュアル等を参照してください。 Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 3 1-3. プロジェクトの編集 1-3-1. 「ContentTextType」プロパティーの設定 プロジェクトの詳細設定ダイアログにて「ContentTextType」プロパティーに 「Application/vnd.fdf」を設定します。 図 1-4. プロジェクトの詳細設定ダイアログ 1-4. HTMLの修正 1-4-1. 注文明細のページ (orderdetail.html) 注文明細の下部にPDFファイルを表示するためのリンク(<A>タグ)を追加します。 <html> <head> <title>チュートリアル 第2部</title> <link rel="stylesheet" type="text/css" href="/tutorial.css"> </head> <body> <table cellspacing="0" cellpading="1" align="center" width="50%"> <tr><td class="table_title">注文詳細 [@注文番号]</td></tr> <tr><td> <table class="list"> <tr> <th class="list">明細番号</th> <th class="list">商品コード</th> <th class="list">メーカー</th> Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 4 <th class="list">商品名</th> <th class="list">注文数</th> <th class="list">金額</th> </tr> <!-- %repeat --> <tr> <td class="list" align="center">@行番号</td> <td class="list">@商品コード</td> <td class="list">@メーカー</td> <td class="list">@商品名</td> <td class="list" align="center">@注文数</td> <td class="list" align="right">¥@金額</td> </tr> <!-- %end --> <tr> <th class="list" colspan="5">合計金額</th> <td class="list" align="right">¥@合計金額</td> </tr> </table> </td></tr> <tr><td> </td></tr> <tr><td> <a href="@WEBAPP?nextpage=orderlist.html">注文一覧に戻る</a> </td></tr> <tr><td> <a href="@WEBAPP?nextpage=pdfview.html&id=@注文番号">PDFでの表示</a> </td></tr> </table> </body> </html> 1-5. インタラクティブなPDFの表示 1-5-1. インタラクティブなPDF表示のHTMLファイル (pdfview.html) FDF(Form Data Format)データとしてレスポンスするためにメディアタイプ(データタイプ)を指 定します。 101NEOにてレスポンスのメディアタイプを指定するには %content-type を使用します。こ のコマンドによりMIME形式の content-type が設定されます。 指定しなかった場合には「text/html」としてレスポンスされます。 <!-- %content-type application/vnd.fdf --> %FDF-1.2 1 0 obj << /FDF << /Fields [ << /V (@注文日時)/T (orderdate)>> <!-- %repeat --> << /V (@idx)/T (no@idx)>> << /V (@商品コード)/T (code@idx)>> << /V (@メーカー)/T (maker@idx)>> << /V (@商品名)/T (name@idx)>> << /V (@注文数)/T (num@idx)>> << /V (@金額)/T (price@idx)>> Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 5 <!-- %end --> ] /Encoding /Shift-JIS /F (http://www.101s.co.jp/pdf/order.pdf) >> >> endobj trailer << /Root 1 0 R >> %%EOF FDFでは「小計」、「消費税」、「合計金額」を設定していません。今回用意したPDFにて各値 を自動計算するように設定しています。自動計算に詳細はAcrobatのマニュアルを参照して ください。 FDFでは、/FオプションにてPDFファイルを指定します。例では、弊社サイトのPDFファイルを テンプレートとして使用するように記述しておりますが、同ファイルをダウンロードしローカル のPDFファイルを使用することも可能です。 例えば、101NEO Studioでは、HTMLファイルのフォルダにPDFファイルを配置した場合、次 のように指定することでローカルのPDFファイルをテンプレートとして使用するようになりま す。 /F (http://localhost:8888/order.pdf) 1-5-2. PDF表示用の仕様定義書 (pdfview.spj) FDFデータで使用される変数を設定します。 内容的にはHTMLデータとしてレスポンスするロジックと同様です。 [reference] 注文日時 = $注文日時 idx = $行番号 商品コード = $商品コード メーカー = $メーカー 商品名 = $商品名 注文数 = $注文数 金額 = $金額 [init_page] local(sql, rs) call ReplaceMarker(sql, "select 行番号, o.商品コード, 商品名, メーカー, 注文数, 金額 from 注文明細 o, 商品マスター m where 注文番号 = ?id and o.商品コード = m.商品コード order by 行番号" ) call QuerySQL(rs, oracle, $sql) local(行番号, 商品コード, 商品名, メーカー, 注文数, 金額) call SQLResultRowArray(rs, 1, 0, 行番号, 商品コード, 商品名, メーカー, 注文数, 金額) call ReplaceMarker(sql, "select to_char(注文時刻, 'yyyy/mm/dd hh24:mi') from 注文データ where 注文番号 = ?id" Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 6 ) call QuerySQL(rs, oracle, $sql) local(注文日時) call SQLResultRow(rs, 1, 注文日時) 1-6. 動作確認 1-6-1. 実行画面 下図のように注文詳細ページに「PDFでの表示」リンクが表示されます。 図 1-5. 注文詳細ページ 「PDFでの表示」リンクをクリックすると下図のようにデータベースから取得した値を各項目 に設定したPDFを動的に表示します。 図 1-6. 動的に作成されたPDF Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 7 1-7. 文字化けの対応 FDFファイルのエンコードを Shift-JIS にした場合、そのまま置き換えてしまうとシフトJIS漢 字コードの2バイト目が '¥' の場合に文字化けを起こします。 これは FDF を使用した場合の PDF の仕様です。 そのため、Unicode でエンコーディングして埋め込むことになります。PDF用の Unicodeエン コーディング文字列を作成するのが pdf.to_unicode() 関数です。 1-7-1. PDF表示のHTMLファイルの修正 (pdfview.html) 「/Encoding /Shift-JIS」を削除します。 <!-- %content-type application/vnd.fdf --> %FDF-1.2 1 0 obj << /FDF << /Fields [ << /V (@注文日時)/T (orderdate)>> <!-- %repeat --> << /V (@idx)/T (no@idx)>> << /V (@商品コード)/T (code@idx)>> << /V (@メーカー)/T (maker@idx)>> << /V (@商品名)/T (name@idx)>> << /V (@注文数)/T (num@idx)>> << /V (@金額)/T (price@idx)>> <!-- %end --> ] /F (http://www.101s.co.jp/pdf/order.pdf) >> >> endobj trailer << /Root 1 0 R >> %%EOF 1-7-2. PDF表示用の仕様定義書の修正 (pdfview.spj) 日本語文字列が使用される可能性のあるデータをエンコードするように修正します。 今回の例では「メーカー」と「商品名」が日本語文字列を使用していますので「reference」セ クションでエンコード処理をするように定義します。 [reference] 注文日時 = $注文日時 idx = $行番号 商品コード = $商品コード メーカー = pdf.to_unicode($メーカー) 商品名 = pdf.to_unicode($商品名) 注文数 = $注文数 金額 = $金額 [init_page] Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 8 local(sql, rs) call ReplaceMarker(sql, "select 行番号, o.商品コード, 商品名, メーカー, 注文数, 金額 from 注文明細 o, 商品マスター m where 注文番号 = ?id and o.商品コード = m.商品コード order by 行番号" ) call QuerySQL(rs, oracle, $sql) local(行番号, 商品コード, 商品名, メーカー, 注文数, 金額) call SQLResultRowArray(rs, 1, 0, 行番号, 商品コード, 商品名, メーカー, 注文数, 金額) call ReplaceMarker(sql, "select to_char(注文時刻, 'yyyy/mm/dd hh24:mi') from 注文データ where 注文番号 = ?id" ) call QuerySQL(rs, oracle, $sql) local(注文日時) call SQLResultRow(rs, 1, 注文日時) 1-7-3. 動作確認 図 1-6. では明細番号3のメーカーが文字化けしていましたが、この修正で改善されたこと を確認できます。 この文字列の文字化けがなくなりました。 図 1-7. 文字化けが改善された動作画面 Copyright © 2004 101 Co., Ltd. All Rights Reserved. Tutorial PDF 利用 - Page 9