Python で PDF 作成するコードのテストを CircleCI で実施するときのコツ

投稿日: 2022/07/21
更新日: 2024/02/28
シェア:

URL copied!


概要

Python で PDF を作成している部分があり、 正しい文字が PDF に含まれているか のテストを作成したい。
これを CircleCI(以降 CI)で実施するために必要だったことを記します。

PDF の中身を読み取るには

PDF を扱うパッケージで主なものは2つあります。

  • PyPDF2
  • pdfminer.six

どちらも PDF に含まれる文字を書き起こすことができます。

PyPDF2

pip install PyPDF2
from PyPDF2 import PdfFileReader

with open('file/test.pdf', 'rb') as file:
    reader = PdfFileReader(file)
    page_1 = reader.getPage(0)
    print(page_1.extractText())
    # print(page_1.extract_text())  # version 1.28.0 からはこちら

# HogeHoge

pdfminer.six

pip install pdfminer.six
from io import StringIO
from pdfminer.high_level import extract_text_to_fp

output_string = StringIO()
with open('file/test.pdf', 'rb') as file:
    extract_text_to_fp(file, output_string)
    print(output_string.getvalue().strip())

# HogeHoge

しかし、PyPDF2 は日本語に対応しておらず、pdfminer.six は大丈夫です。

今回私のところでは日本語が含まれる PDF を作成していましたので、pdfminer.six を用いてテストを書きました。

CI で正しく実行されるには

結論からお伝えすると、 作成するPDFに日本語フォントを指定し、テスト実行前、コンテナ作成時に同一フォントのインストール を実行しておいてください!

sudo apt-get install 'fonts-takao-*'


これを忘れてしまっていたので、私は暗礁に乗り上げてしまっていました。。。
ローカルではできていたのに何で。。。と。
この設定に気づく前、テストのエラーを見ると比較対象の文字が良くわからない(デコードできない)英数字の文字列になっていました。なんの文字列なのか頭を悩ませこれが原因で暗礁にのりあげましたが、結果的に日本語に変換できずなんらかの文字を当てて化たものを読み取ってくれていたみたいです。
それに気付いたのは CI のコンテナ内に SSH で入り、実際にファイルを作って、ローカルに持ってきて見たら文字化けしていることに気付きました。
そこで日本語フォントを入れたらあら不思議、正しく実行できました。

参考