Pythonでfpdf2を使用しテキストファイルをPDFファイルへ変換する

Pythonでfpdf2を使用しテキストファイルをPDFファイルへ変換してみます。

fpdf2は、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■テキストファイルを用意する

テキストファイルをPDFファイルへ変換するために、まずはテキストファイルを用意します。

今回は、「test01」というtxt形式のテキストファイルを用意しました。このテキストファイルが保存されている場所は「C:\Users\user_\test(フォルダパス)」です。

■テキストファイルをPDFファイルへ変換する

テキストファイルのファイルが用意できましたので、テキストファイルをPDFファイルへ変換するスクリプトを書いていきます。

■コード

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()

font_path =r"C:\Users\user_\Downloads\hannari\****.ttf"
pdf.add_font("hannari",fname=font_path,uni=True)
pdf.set_font("hannari")
f = open(r"C:\Users\user_\test\test01.txt","r",encoding="utf8")
for x in f:
pdf.cell(50,5,txt=x)
pdf.output(r"C:\Users\user_\test\new_test.pdf")

「from fpdf import FPDF」で、fpdf2を呼び出します。その後に、pdfという変数を定義し、FPDFオブジェクトを作成し、格納します。

格納後、add_page()を使用し、PDFにページを追加します。

追加後、font_pathという変数を定義し、その中にttf形式のフォントファイルを指定します。otf形式のフォントファイルは、サポートされていない。今回は、日本語フォント「はんなり明朝」という商用利用可能の無料フォントをダウンロードし、otf形式のフォントファイルから、ttf形式のフォントファイルへ変換し、このフォントを利用します。変換する際は変換ツール(コンバーター)を使用します。

なお、fpdf2を利用する際に、set_fontで指定しているfamilyのArialは、日本語に対応していないため、UnicodeDecodeErrorで「’cp932′ codec can’t decode byte 0x86 in position 11」や「’latin-1′ codec can’t encode characters in position 0-8」が発生するので、このような対応をします。

font_path変数にフォントファイルを格納後、add_font()関数で、フォントを追加する。追加する際は括弧内に、第1の引数,パラメータとしてフォント名、第2の引数,パラメータとして、font_path変数を渡します。第3の引数,パラメータとして、日本語フォントを利用するため「uni=True」を指定します。

フォントを追加後、set_font()関数を使用し、フォントをセットする。

セット後、open()関数で、今回用意したテキストファイルの名前と、置かれている場所(フォルダパス)を指定し、読み込みモード”r”でファイルを読み込み、「encoding=”utf8″」でutf8でエンコードします。

その後、for文とcell()関数を使用し、読み込みモードで読み込んだファイルの内容をFPDFオブジェクトにセル(長方形の領域)として出力します。cell()関数の括弧内では、第1の引数,パラメーターとして、セルの幅を渡します。第2の引数,パラメーターでは、セルの高さを渡します。(https://pyfpdf.github.io/fpdf2/fpdf/fpdf.html#fpdf.fpdf.FPDF.cell

出力後、FPDFオブジェクトをoutput()関数でpdf形式のファイルとして出力します。今回は出力先として、「C:\Users\user_\test(フォルダパス)」を指定し、ファイル名を「new_test.pdf」としています。

■実行・検証

このスクリプトを「textfile_pdf.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、PDF形式のファイルとして出力が完了といった文字列をprint()関数で出力するといった指示はスクリプトには記述していないので、何も出力されません。

何も出力されませんが、スクリプト内でPDF形式のファイルの出力先として記述した場所を確認すると、PDF形式のファイルが出力されていることが確認できました。

確認後、ファイルを開きます。開くと、今回用意したテキストファイルの情報が、PDF形式のファイルに出力されていることが確認できました。

コメント

タイトルとURLをコピーしました