IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第36回 Pythonのライブラリ「ReportLab」でPDFを作る方法 ~インポートとフォントの登録編~ (菱沼佑香) 2022年9月

こんにちは、吉政創成 菱沼です。 今回も「いちばんやさしいPython入門教室(大澤 文孝氏著) 」を片手に勉強していきます。

さて、前回は拡張モジュールのインストール方法について学習しました。 今回からは前回インストールしたPDFを作るライブラリ、ReportLabを使って学習しますが、まずはReportLabの基本的な手順を確認します。

サンプルコードの確認

まずはテキストで紹介されているサンプルを実行してみます。それがこちら。

fig01

これを実行すると出力されるのがこちらです。

fig02

出力された先は、実行したファイル(ここではexample08-03-01.py)が保存されているフォルダでした。 動作を確認したところで、次はコードを確認していきます。

モジュールをインポートして使えるようにする

tkinterやcalendarのモジュールを使うのと同様に、先にモジュールを使えるようにしないといけないため、import文かfrom文で読み込みます。基本の書式を振り返ってみますとこうなります。

  1. import モジュール名
  2. import モジュール名as 略称
  3. from モジュール名 import クラス名orメソッド名or変数名

それぞれの書き方何が違うのかと言いますと... 例えばcalendarモジュールで同じ処理を試してみるとこうなります。③に行くにつれて記述が短くなっていることがわかります。②はモジュール名を短縮して書けるようになりますが、逆に正式名称では書けなくなりますのでご注意を。③はモジュールの中の特定のクラス(一部の機能)に限定して呼び出しているので、モジュール名を書かなくてもよくなりますが、モジュールの他の機能は使えません。

fig03

今回使用するライブラリ、ReportLabでPDFを作成する場合は、大体5種類のクラスを使うのだそうです。それが以下の5点。

-----

P.242
ReportLabにはたくさんの関数やクラスが含まれていますが、PDFを作成する場合は、だいたい次の5種類のクラスをインポートするのが一般的です。

  • canvas
    PDFの描画領域(ページ面)を表現します。
  • pdfmetrics
    PDFの構造を表現します。フォントの登録などは、このクラスを使って操作します。
  • UnicodeCIDFont
    フォントを表現します。
  • unit
    単位を表現します。「㎜(ミリメートル)」「㎝(センチメートル)」などが定義されています。
  • pagesizes
    用紙サイズを表現します。「A4」「A3」などが定義されています。

-----

ということで、これらのクラスが指定されているのはサンプルコードで言うこの部分ですね。

fig04

ちなみに、ライブラリ名の後に「.」で続けられていますが、これはこのライブラリで使える関数名や変数名になります。

フォントの読み込みが必要

さて、PDFで文字を書くために、事前にどのフォントを利用するか、登録する必要があるのだそうです。 テキストではAcrobatに含まれている標準フォントを利用しているようです。まずはテキストから引用です。

-----

P.242
フォントを登録するには、pdfmetricsのregisterFontというメソッドを使います。括弧の中に指定するのは、指定したい文字の書体――フォント名です。

fig05

自由な書体を使うこともできますが、ここにあるように「UnicodeCIDFont」というオブジェクトを使うと、Acrobatに含まれている標準フォントを利用できます。 Acrobatが対応している標準フォントの種類は表のとおりです。明朝体とゴシック体があり、最も古いAcrobat4に対応しているのが、明朝体は「HeiseiMin-W3(平成明朝体)」、ゴシック体は「HeiseiKakuGo-W5(平成角ゴシック体)」です。 (中略)

Acrobatバージョン 明朝体 ゴシック体
Acrobat4 HeiseiMin-W3(平成明朝体) HeiseiKakuGo-W5
(平成角ゴシック体)
Acrobat5
Acrobat6
KozMinPro-Regular-Acro
(小塚明朝体)
KozGoPro-Metium-Acro
(小塚ゴシック体)
Acrobat7 KozMinProVI-Regular
(小塚明朝体)
KozGoPro-Metium
(小塚ゴシック体)

-----

もちろん、Acrobat対応以外にWindowsなどのOSですでに利用しているフォントや、無料・有料のフォントファイルを持っているようなら、それも利用できるように設定できるそうです。 Windowsにインストールされているフォントは以下の場所で確認できます。Macについては後ほど。

C:\Windows\Fonts

ここで確認できるフォントの中から使いたいフォントのプロパティを開き、パスとフォントファイルの名前をプログラムに埋め込んでいきます。 ちなみに使用できるファイルの種類は「.ttc」のみとテキストには書かれているのですが、調べてみると「.ttf」も使えるようです。

Acrobat以外のフォントを使えるようにする方法
  1. ttfontsクラスをインポート

fig06

  1. フォントの登録をする
    fig07

    ※フォントのファイル名の部分はフォントのパスも含めた名称を指定します。
    なので、Windowsの場合であれば、C:¥¥windows¥¥Fonts¥¥(ファイル名.拡張子)です。
    (¥マークが2回になっていることをお忘れなく。)

  2. フォントの指定をする
    ここはサンプルコードと変わらず、setFontが使用されます。

    fig08

ということで、やってみたのがこちら。 ちょうどTTFファイルとして游明朝がありましたので、ちゃんと動くかを.ttfで試してみました。

fig09

そして出力結果がこちらです。 左が元のサンプルコード(Acrobat標準フォント)で、右がTTFフォントである游明朝です。

fig10

ちゃんと.ttfでも出力できることがわかりました。 (別途、.ttcでも試してみましたが、問題なく出力されていましたがここでは割愛します。)

Macの場合

Macは「OpenType」と呼ばれるフォントが標準で使用されており、そのフォントはReportLabでは使えないようなので、市販やフリーのTrue Typeフォントを手に入れる必要があるそうです。プログラムにするときのフォントの指定方法はWindowsと同じですが、フォントファイルの保存場所はプログラムファイルを置く場所でよさそうです。

きりがいいので今回はこちらで終了です。 最後に公式ドキュメントや参考サイトをご紹介します。ご興味がある方は覗いてみてください。

今回もお付き合いいただきありがとうございました。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes