Pleasanterで印刷(PDF)の下準備

2022/11/10に公開

何をしたいのか?

Pleasanter(プリザンター)はローカルサーバに導入すれば無料で使うことができるWebDBの製品です。WebDBの製品はExcelの置き換えとしてDXのお題目で導入されることが多いですが、印刷を苦手とする弱点があると思います。情報共有だけならWeb画面で完結するとは思うのですが、入力したデータからきれいな印刷(PDF)を出したくなるのが人情というもの。外部向けの見積もりとかなら帳票は必要ですしね。
そこで、PleasanterからPentaho Data Integration(PDI)を使ってPDFを作成する方法について試行錯誤してみたのでその記録を残しておきます。

  1. Pleasanterのスクリプトで印刷したい情報を取り出す → PDIサーバに送信
  2. PDIサーバではPDIのデータ変換(Transformation)の変数として送信情報を受け取り、事前にPentaho Report Designerで作っておいた帳票定義にデータを流して帳票(PDF)を作成
  3. 作成された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)のダウンロードと解凍
https://sourceforge.net/projects/pentaho/files/Pentaho-9.3/client-tools/
ページから
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

それぞれにアクセスしてみてエラーがないか確認で下準備が完了

後半の記事はこちら
https://zenn.dev/sirokum/articles/a4301cc09f62f5

Discussion