住所録から封筒へ – LibreOfficeを使った自動化印刷 準備
最後の記事 (“LibreOfficeを使って印刷物(PDF)を作る方法 プリンタへ出力 4/4”) にコードとテストデータ、テンプレートなどをまとめて置きますのでダウンロードして使ってください。
準備すること
-
-
LibreOfficeのインストール
LibreOfficeをインストールします。LibreOffice BaseとLibreOffice Calcを使用します。
LibreOfficeは、オープンソースのオフィススイートで、WordやExcelと同様の機能を持っています。
ダウンロードしてインストールしてください。
-
パスを通す
LibreOfficeのPythonを使用するため、PATH環境変数にLibreOfficeのprogramフォルダを追加して、LibreOfficeのPythonを使えるようにします。
これにより、LibreOfficeの`uno`モジュールを利用してLibreOfficeとの通信を行います。
これは、Window版のLibreOfficeの場合、unoモジュールに合ったPythonが添付されています。
システム自体にパスを設定しても良いのですが、Pythonを使う方はそれだとほかのバージョンを使えなくなってしまいます。
そのため、使うたびにその時限りのパスを設定するのですがそれだとコマンドを入力するのが面倒なのでスクリプトをあらかじめ用意します。
スクリプトは以下の通りです。
set PATH=C:\Program Files\LibreOffice\program;%PATH%
このスクリプトを.batファイルに保存し、実行することでPATHを通すことができます。これはcmd.exe用です。もちろんcmd.exe上で直接実行してもOKです。
PowerShellを使う場合は以下のスクリプトを使います。
$env:PATH = "C:\Program Files\LibreOffice\program;" + $env:PATH
このスクリプトを.ps1ファイルに保存し、実行することでPATHを通すことができます。
これは、LibreOfficeのパスが “C:\Program Files\LibreOffice\”である場合で環境によって読み替えてください。このフォルダにProgramというフォルダがあってそこにLibreOfficeのコマンドが保存されていています。
また、LibreOfficeのパスを先頭に追加しない場合、ほかのPythonが優先的に起動する場合があります。
これからLibreOfficeとPythonの組み合わせで自動化を行っていこうという方は、上記のコマンドを set_libreoffice_path.ps1 などとして自分専用のコマンドフォルダに保存しておくとPowerShellからすぐに呼び出せるので便利ですよ。
-
Pythonの確認
Pythonがインストールされているか確認します。
これから使うテスト用のフォルダを作成し、その中にPythonスクリプトを保存します。今回は “C:\Users\$env:USERNAME\ScriptTest” とします。
$env:USERNAMEはPowerShellでユーザー名を取得するコマンドです。
PowerShellを起動して以下のコマンドを入力します。
cd "C:\Users\$env:USERNAME\ScriptTest"
python --version
Pythonのバージョンが3.9.20等古いものでしたら大丈夫でしょう。
より正確には、
python -c "import sys; print(sys.prefix)"
として、Pythonのインストール先を確認してください。
C:\Program Files\LibreOffice\program\\python-core-3.9.20
などと表示されれば問題ありません。
-
get-pip.pyをでpipを使えるようにする
今回の例では必要ないのですが今後必要になるので、Pythonのパッケージ管理ツールであるpipを使えるようにします。
先ずは、下のリンクを右クリックから get-pip.py をダウンロードします。
ダウンロードしたファイルを先ほどパスを通したPowerShellからpipをインストールします。
python get-pip.py # pipをインストール python -m pip --version # pipのバージョンを確認
-
データベースの準備
LibreOffice Baseを起動し、新しいデータベース”住所録.odb”を作成します。
データベースにaddressとしてテーブルを作ります。
テーブルには、以下の様にフィールドを追加します。
id BINGINT PrimaryKey name VERCHAR(100) postal_code CHER(7) address VERCHER(256) phone_number CHER(15)
余談ですが、LibreOffice CalcからデータをBaseへデータをコピーする方法を説明します。
まず、Calcでヘッダーも含めてデータの範囲を選択し、コピーします。
次に、Baseを起動し、テーブル画面に移動して右クリックして貼り付けします。
その際に、使用する項目(ヘッダー)を選択してプライマリキーを設定します。
-
テンプレートの準備
LibreOffice Calcを起動し、テンプレートを作成します。
テンプレートに入力したいものをテキストボックスで配置して、名前を付けます。
“封筒テンプレート.ods”としてCalcのファイルを作ります。
例として、長形4号(幅9cm 高さ20.5cm)の封筒に名前、郵便番号、住所を入れるテンプレートを作成します。
Calcを起動して、以下の様に設定します。
-
- 書式 > ページスタイル > ページタブ
サイズ名:ユーザー
幅:9cm
高さ:20.5cm
余白:上下左右すべて0cm書式 > ページスタイル > ヘッダータブ
ヘッダーを付ける:チェックを外す書式 > ページスタイル > フッタータブ
フッターを付ける:チェックを外す - A1セルのセル外左上をクリックしてすべてのセルを選択します。
ヘッダーにマウスを移動して、右クリックでセルの幅を1cmに設定します。
インデックスにマウスを移動して、右クリックでセルの高さを0.5cmに設定します。
ここまですると点線で封筒の大きさが表示されます。
封筒の大きさに合わせてセルを選択します。”A1:H38″のはずです。
書式 > 印刷範囲 > 定義
表示 > 改ページ
これで必要な部分だけ表示されるようになります。 - テキストボックスを挿入します。
挿入 > テキストボックス
ボックスが表示されたら「郵便番号」と入力します。
郵便番号と入力したボックスを選択して、右クリック”名前”で”postal_code”と名前を付けます。
これでPythonからこの名前でアクセスできるようになります。
挿入 > テキストボックス
ボックスが表示されたら「住所」と入力します。
確定する前に、縦書きのアイコンをクリックして縦書きにします。
名前を付けて”address”とします。
同様にテキストボックスに「名前」と入力して名前を付けて”name”とします。
- 書式 > ページスタイル > ページタブ
これでテンプレートの作成は完了です。
次は、Pythonスクリプトを解説します。
-
LibreOfficeを使って印刷物(PDF)を作る方法 1/4
LibreOfficeを使って印刷物(PDF)を作る方法 2/4
Commnts