Pleasanterで印刷(PDF)_準備2と実行
前回の記事で印刷用サーバとしてPentaho Data Integration(PDI)サーバを動かしました。
今回の記事で準備の続きとPDF作成までを記録しておきます。- 開発用PCにサーバに入れたものと同じフォント(IPAフォント)を導入しておくこと
- 開発環境はJAVA必要です
- この記事での印刷対象はプリザンターのテンプレート「情報システム」→「パソコン資産管理」です
PDIでデータ受取用データ変換を作成
Pleasanterのスクリプトからデータを受け取り、帳票作成を実行する「データ変換」を作成します。前回サーバ用にダウンロードした pdi-ce-9.3.0.0-428.zip を開発用PCで解凍し、作成された data-integration フォルダ内の spoon.sh(開発機がwindowsの場合はspoon.bat)を実行します。
開発機がUbuntu2004の場合
にある通り、libwebkitgtk-1.0-0を入れておいて下さい。
データ受信用のデータ変換は画像の通り。
データ変換のパラメータは
「変数取得」ステップは
「数式」ステップは
文字列の連結でprptフォルダに設置する予定の帳票定義ファイルと、作成されるPDFファイルの出力先の情報を生成しています。
「Pentahoレポート出力」ステップは
作成したファイルは任意のフォルダに「exec_report.ktr」の名前で保存します。
PDIで帳票定義から実行されるデータ変換を作成
帳票定義からデータソースとして呼ばれるPDIデータ変換を作成します。
帳票定義を通して受け取るJSONを処理するデータ変換は画像の通り
パラメータは
「変数取得」ステップは
「JSON input」ステップは
JSONデータの分解部分はPOSTMAN等を用いて得られるJSONを一旦ファイルに保存し、そのファイルを「ファイル」タブで指定して「フィールド」タブの「Select fields」ボタンをクリックすると、画像のような画面からチェックで選んで設定できるので楽です。
その場合、「ファイル」タブの「フィールドにソースを定義」のチェックを入れ直すのを忘れないように。
「選択/名前変更」ステップは
受け取ったJSONをそのまま戻すと帳票定義の中で名前重複してややこしくなるので除去しています。
作成したデータ変換は「exec_report.ktr」を保存したフォルダに「prpt」フォルダを作成し、その配下に「pc_kanri_data.ktr」という名前で保存します。
帳票定義の作成
帳票定義はPentaho Report Designerというソフトを使います。
から「prd-ce-9.3.0.0-428.zip」というファイルをダウンロードして任意のフォルダに解凍します。作成されたreport-designerフォルダ内のreport-designer.sh(Windowsの場合report-designer.bat)を実行し起動します。File → 新規 で新規帳票定義作成を開始します。何もない状態で一旦ファイルを「pc_kanri_data.ktr」と同一のフォルダに「pc_kanri.prpt」というファイル名で保存します。
保存できたら Data → パラメータ追加を選択し、
「json」というパラメータを追加します。
また、「exec_report.ktr」で設定した「id」パラメータも手順を繰り返して追加しておきます。(今回は未使用ですが、パラメータが一致していないとエラーになるので)
続いて Data → AddDataSource → Pentaho Data Integration でデータソース追加画面を表示します。
緑のプラスマークをクリックすると「クエリー1」が追加され、ファイル名を入力できるようになるので、「pc_kanri_data.ktr」と入力します。データをレポート用データを取得するステップが選択できるようになるので「選択/名前変更」を選択します。パラメータ編集ボタンをクリックすると
Name列に「pc_kanri_data.ktr」で設定したパラメータ「json」が表示されるのでValue列に帳票定義側で作成したパラメータ「json」を指定します。
「OK」でダイアログを閉じると「pc_kanri_data.ktr」で読み込んだデータが右に表示されるので、適宜データを帳票定義エリアにD&Dして設置します。
各項目のフォントやフォントサイズは左上で設定できます。サーバに導入済みの日本語対応フォントを選択します。
数値のフィールドは表示形式を設定することも可能です。
一通り済んだら上書き保存しておきます。
帳票定義とそこから呼び出すデータ変換のファイル名が同じだと正常に動作しないことがあるようです。Pentahoのバグのような気もしますが、原因不明でハマったので要注意です。
出来上がったファイルをサーバに設置
ここまでの工程でできたファイルをPDIサーバに設置します。
指定がしやすいようにroot直下にpdifilesフォルダを作成し、その配下に以下の通り設置して下さい。
/pdifiles/
├── exec_report.ktr
└── prpt
├── pc_kanri.prpt
└── pc_kanri_data.ktr
プリザンターにスクリプト作成
プリザンターの「パソコン資産管理」テーブルのテーブル管理からスクリプトを追加します。
スクリプトの内容は以下の通り
$("#MainCommands button:last-child").after(
$('<button onclick="GetRecordDataTest();">PDF作成</button>').button(
{ icon: ' ui-icon-arrowthickstop-1-s' }
)
);
function GetRecordDataTest() {
var ApiUrl="/api/"+$p.controller()+"/"+String($p.id())+"/get";
var koyu = $p.userId() + "_" + Date.now()
console.log(ApiUrl);
// Fetch APIでデータ送信
fetch(ApiUrl, {
method: 'post'
})
.then(response => response.text())
.then(data => {
console.log(data);
GetPdfUrl(data,koyu);
})
}
function GetPdfUrl(snd_json,koyu) {
var prpt_file = "pic_pdf"
var pdiUrl = "http://pdi.sirokum.com/kettle/executeTrans/?trans=/pdifiles/exec_report.ktr&rep=&prpt_file=" + prpt_file + "&id=" + koyu + "&json=" + snd_json;
console.log("pdiUrl : " + pdiUrl);
var pdf_url = "http://rep.sirokum.com/" + koyu + "_" + prpt_file + ".pdf";
fetch(pdiUrl,{
method: 'post',
mode: 'no-cors'
})
.then(response => {
console.log(response.text());
response.text();
})
.then(data => {
console.log(data);
GetPDF(pdf_url);
})
}
function GetPDF(pdf_url) {
window.open(pdf_url);
}
チェックは「編集」にのみ入れています。
「pdi.sirokum.com」と「rep.sirokum.com」は各環境に合わせて書き換えて下さい。
「PDF作成」ボタンが表示され
クリックすると別のタブでPDFが表示されます
おまけ
画像をDB保管にしていると、添付ファイルをPDFに表示させることもできますよ。DBを直接参照しているので内部で使う場面専用となりますが・・・
Discussion