Python で PDF 作成するコードのテストを CircleCI で実施するときのコツ
投稿日: 2022/07/21
更新日: 2024/02/28
更新日: 2024/02/28
概要
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 で入り、実際にファイルを作って、ローカルに持ってきて見たら文字化けしていることに気付きました。
そこで日本語フォントを入れたらあら不思議、正しく実行できました。