Pleasanterで印刷(PDF)の下準備
何をしたいのか?
Pleasanter(プリザンター)はローカルサーバに導入すれば無料で使うことができるWebDBの製品です。WebDBの製品はExcelの置き換えとしてDXのお題目で導入されることが多いですが、印刷を苦手とする弱点があると思います。情報共有だけならWeb画面で完結するとは思うのですが、入力したデータからきれいな印刷(PDF)を出したくなるのが人情というもの。外部向けの見積もりとかなら帳票は必要ですしね。
そこで、PleasanterからPentaho Data Integration(PDI)を使ってPDFを作成する方法について試行錯誤してみたのでその記録を残しておきます。
- Pleasanterのスクリプトで印刷したい情報を取り出す → PDIサーバに送信
- PDIサーバではPDIのデータ変換(Transformation)の変数として送信情報を受け取り、事前にPentaho Report Designerで作っておいた帳票定義にデータを流して帳票(PDF)を作成
- 作成されたPDFを所定のWebページで返却
こんな流れになります。
前提条件
- UbuntuServer2004
- いきなり本番サーバは怖いからテストサーバで確認してみて
- Pleasanterのバイナリファイル保存がDB、かつ、DBへの外部からのアクセス可能なら別サーバでも問題ないと思う
- Pentaho Data Integrationサーバ(carte)用DNS、レポート返却用DNS、Pleasanter用DNSがそれぞれ必要
(開発時はhostsファイルへの登録でも問題ない)
UbuntuServer2004パッケージインデックス最新化と必要なツールをインストール
sudo apt update
unZipのインストール
sudo apt install unzip
IPAフォントのインストール
sudo apt install fonts-ipafont
必要に応じてフォントは追加インストールすること
帳票作成と同じフォントをサーバに導入が必要
OpenJDKのインストール
sudo apt install openjdk-11-jdk
Pentaho Data Integration(PDI)のダウンロードと解凍
pdi-ce-9.3.0.0-428.zip
をダウンロードしてサーバに転送
unzip pdi-ce-9.3.0.0-428.zip
sudo mv data-integration /opt/
日本語環境のインストールと設定
これをやっておかないと原因不明のエラーでハマる・・・
sudo apt install language-pack-ja-base language-pack-ja ibus-mozc
localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
source /etc/default/locale
Webサーバインストール(Pleasanterインストール時済なら不要)
sudo apt install nginx
PDIデータ変換ファイルとレポート定義(.prpt)ファイルの設置場所とレポート出力先
sudo mkdir /pdifiles
sudo mkdir /pdifiles/prpt
sudo chmod 777 /pdifiles -R
sudo mkdir /var/www/report
PDIサーバ(carte)の設定と起動確認
cd /opt/data-integration
sudo cp pwd/carte-config-master-8080.xml ./carte-config.xml
sudo vi carte-config.xml
テスト用にhostnameにサーバIPアドレスを設定
username、passwordを追加
<slave_config>
<slaveserver>
<name>master1</name>
<!--
<hostname>localhost</hostname>
-->
<hostname>192.168.0.1</hostname>
<port>8080</port>
<username>cluster</username>
<password>cluster</password>
<master>Y</master>
</slaveserver>
</slave_config>
PDIサーバ(carte)起動
cd /opt/data-integration
sudo ./carte.sh carte-config.xml
別PCのwebブラウザからアクセスして確認
http://192.168.0.1:8080
「ステータスの表示」をクリックするとベーシック認証を求められるのでcluster:clusterでステータス画面が表示されればOK
サーバのコンソールからCtrl + cでPDIサーバ(carte)を終了
cd /opt/data-integration
sudo vi carte-config.xml
Nginxからリバースプロキシさせるためhostnameをlocalhostに戻す
<slave_config>
<slaveserver>
<name>master1</name>
<hostname>localhost</hostname>
<!--
<hostname>192.168.0.1</hostname>
-->
<port>8080</port>
<username>cluster</username>
<password>cluster</password>
<master>Y</master>
</slaveserver>
</slave_config>
おまじない(PDF作成には関係ないけど、carteサーバで日本語を返却すると文字化けするので対策)
sudo vi /root/.kettle/kettle.properties
末尾に以下を追加
KETTLE_DEFAULT_SERVLET_ENCODING = UTF-8
起動スクリプト
cd /opt/data-integration
sudo vi pdi-server.sh
内容は以下の通り
#!/bin/sh
/opt/data-integration/carte.sh /opt/data-integration/carte-config.xml
実行権限付与
sudo chmod +x /opt/data-integration/pdi-server.sh
PDIサーバ(carte)のサービス登録
sudo vi /etc/systemd/system/pdi-server.service
内容は以下の通り
[Unit]
Description = Pentaho Data Integration Server
[Service]
WorkingDirectory=/pdifiles/
ExecStart = /opt/data-integration/pdi-server.sh
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target
PDIサーバ(carte)のサービス起動
sudo systemctl daemon-reload
sudo systemctl start pdi-server.service
sudo systemctl enable pdi-server.service
Nginxのリバースプロキシ設定(PDIサーバ用)
cd /etc/nginx/conf.d/
sudo vi pdi.sirokum.com.conf
内容は以下の通り
server {
listen 80;
server_name pdi.sirokum.com;
client_max_body_size 100M;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Authorization "Basic Y2x1c3RlcjpjbHVzdGVy";
add_header Access-Control-Allow-Origin "*";
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
「pdi.sirokum.com」はそれぞれ自分の環境に書き換えてください。
proxy_set_header Authorization "Basic Y2x1c3RlcjpjbHVzdGVy";
で認証なしでアクセスできるようにしています。
本当なら
/kettle/executeTrans/
へのアクセスのみパスワード回避するか、
pleasanterからのjavascriptアクセス時に認証追加してアクセスするのがよいと思います。
Nginxのリバースプロキシ設定(レポート返却用)
cd /etc/nginx/conf.d/
sudo vi rep.sirokum.com.conf
内容は以下の通り
server {
listen 80;
server_name rep.sirokum.com;
client_max_body_size 100M;
location / {
root /var/www/report;
add_header Access-Control-Allow-Origin "*";
}
}
一通り済んだらNginxの設定チェックと再起動
sudo nginx -t
sudo systemctl restart nginx
sudo cp /var/www/html/index.nginx-debian.html /var/www/report/index.html
http://pdi.sirokum.com
http://rep.sirokum.com/index.html
それぞれにアクセスしてみてエラーがないか確認で下準備が完了
後半の記事はこちら
Discussion