退職届けメーカーを作ってみた

退職届けを作成する方法として、まず good-bye.biz さんの退職届けジェネレータを見つけたのですけど、自分の部署名が長すぎて入りきりません。

但し書きも入れたいですし、丁度 PHP で PDF を出力するのを学ぶ良い機会なので、退職届けメーカーを自作しました。

退職届けメーカー

f:id:yoya:20190125215003p:plain:w300
退職届けPDFメーカー

前提
  • クライアント
    • Adobe (PDF) Reader のプラグインが入っているブラウザで使って下さい。
    • Mac + Chrome での使用を推奨します。(Windows だと字が汚い可能性が高いです)
  • サーバ (ソースコードを公開しているので、貴方のサイトにも設置出来ます)
    • PHP5 + FPDF + GD2 が必要です。
    • img と tmp フォルダは多分 www-data 辺りの権限にすると良いです。777 (world writable) でも動きます。
    • DirectoryIndex を resign.php に向けて下さい。
使い方
  • フォームの文字列を書き換えて make ボタンを押すと、右側の PDF プレビュー画面に文字や設定が反映されます
  • 画像をアップロードすると PDF の壁紙として反映されます。それと同時に、画像ID欄に ID文字列が埋まるので、次回からその ID で画像を指定して下さい。
  • QR コードの設定を「はい」にすると PDF の左下に QR コードが埋まります。その時に開いてる URL がコード化されます。
  • なるべく URL から表示を完全に再現します。(プログラムに手直しが入って微妙にレイアウトが変わる可能性有り)
注意
  • awm.jp は SSL 未対応です。
    • 個人名を HTTP でやり取りするのに危機感を抱く方は、github からプログラムを取得して、閉じたネットワーク内のサーバでプログラムを動かすと良いと思います。
    • HTTP である以上、プロキシのログにも残るので、会社からアクセスする場合には気を付けて下さい。遊びで PDF を作ったつもりが、上司に心配されるかもしれません。
  • GET を多用します。
    • URL に個人名が入るという事は app.awm.jp の access_log に記録されるという事ですが、これを誰かに売ったりはしないので信じて下さい。(そんな怖い事出来ません)

俺々証明書でも良いので SSL 対応をすぐするべきか。。

サンプル

著作権者に怒られたら消しますネ。

どれも円満退社がハードモードになりそう。。

開発
  • 画面設計
    • 右側に iframe を置いて、その中に PDF を出力する事で、プレビュー機能を実現します。
    • Twitter Bootstrap で今っぽいデザインに。Thank you so much! > Mr. everlast
  • PDF 日本語対応
    • fpdf.php + japanese.php + rotate.php で、rotate の親クラスを FPDF から FPDF_Japanese に変更。
  • PDF 日本語縦書き対応 (yoyapdf.php のレイヤーで行う)
    • 一文字ずつ分解して基本一定間隔で縦に並べてます
    • 一部、「ー」や「、」といったそのまま表示出来ない文字は適当にずらして表示してます。(力ずく実装)
    • 半角英数字(シングルバイト文字)は横に倒して表示します。プロポーショナルも一応対応。
  • 画像ストレージ
    • 画像を投稿すると、サーバに適当な id*1で保存します
      • 画像が全部同じフォルダにあると色々困るので、NN/NNXXXXXXXXXX.jpg のように先頭二文字のディレクトリでまとめてます。
    • 保存する時にオリジナルと、少し白くした画像を保存して、後者の白っぽい画像を PDF の壁紙として使います。
      • JPEG には半透明の機能がないので、PDF に埋める際のαブレンディングを自前でやる必要があるのです。
課題
  • 折り返し機能とか欲しい。今は無いです。
  • 縦書きは単純に縦に並べてはダメな文字を個別対応していて筋が悪いです。でも、決定的に困る時が来るまで、switch case を増やすのに勤しもうと思います。
  • Windows で文字が汚いのは嫌なので、埋め込みフォントもやりたい。本来やるべき。PDF の P は Portable のはず。
  • オレオレ証明書SSL 対応はモチベーション湧かないので、個人でサーバ証明書買おうかなぁ。

最後に

  • 改善要望をお待ちしております!

*1:sha1 の先頭の方をとってbase64 & 文字置換