こんにちは、株式会社シー・エス・エス、デジタル戦略開発課のaaです。
本日は、スキルチェンジプロジェクトを経て、実業務において、AWS Lamda(Python)での開発機会がありましたPDF編集について解説します。
1.仕様要件
前提条件
・編集元のPDFファイル(雛形ファイル)があること。
・S3が利用可能なこと。
(雛形ファイルのダウンロード、作成ファイルのアップロードに使用)
環境
・Python 3.10.11
・reportlab 4.0.0*1
・pypdf 3.11.0*2
ライブラリインストール手順
pipとsetuptoolsの更新
python -m pip install |
ライブラリのインストール
pip install reportlab pip install pypdf |
2.実施手順
2-1.雛形ファイルをダウンロード
※事前にS3バケットに編集元のPDFファイル(雛形ファイル)のアップロードが必要
2-2.編集内容を記載したPDFファイル作成
キャンパスを作成し表示したい内容を座標指定で配置
※詳細は3.PDF編集についてを参照
2-3.雛形ファイルと作成したファイルを重ね合わせPDFファイルを作成
※1~3を作成するPDFファイル分実施
2-4.作成したPDFファイルを1ファイルに結合
2-5.完成したPDFファイルをアップロード
3.PDF編集について
〇 キャンバス作成(ページ全体設定)
〇 フォント、サイズ指定
フォント指定について*3
〇 色指定
〇 テキスト等、オブジェクトの配置は座標指定
用紙の座標指定は左下が起点 (A4縦の場合、用紙の左上角の座標は0 , 297 * mm)*4
〇 表(テーブル)
〇 テキストボックス(テーブルの項目に指定した場合、テーブル項目内で自動改行)
〇 円、楕円
4.最後に
GUIで直感的に帳票生成するのではなくコードからPDFを生成するため、表示する内容や編集(装飾)内容についての簡易的な設計書を作成することにより、生成PDFを明確にイメージできるようにしました。また、表示内容を配置する座標位置を把握するのが手間でしたが、PDF標準ツールの「ものさし」使用することにより大まかな位置関係を把握することができました。
5.参考
6.この記事を書いた人
ニックネーム:aa
経歴:入社25年目となります。主に金融・証券・銀行系のシステム開発運用業務に携わってまいりました。現在は金融系のシステム保守開発に従事しております。
一言:健康管理には気を付けたいと思っております。
*1:web画面などをPDF化するのではなく、用紙形式のPDFファイルを編集する対応を前提としています。
従って、コードからPDFに変換するreportlabを使用します。
*2:ファイルの結合、上書きにはpypdfを使用します。
本紙利用において支障はないですが、最新バージョンは3.17.1 -2023.11.24現在-
*3:予め組み込まれた日本語フォントは、「HeiseiMin-W3」と「HeiseiKakuGo-W5」。
標準フォント以外のフォントは、登録することで使用可能。
*4:設定で逆(左上)にすることも可能(Canvas作成時、bottomup=Falseを指定)
また、単位はpx(ピクセル)だがmm(ミリメートル)を値に乗算することでmm指定可能