img2pdfを使用しPythonで画像をPDFファイルに変換してみます。
img2pdfモジュールは、Pythonの標準ライブラリではありませんので、事前にインストールしておく必要があります。なお、今回はPIL(Python Image Library)モジュールも必要になりますので、事前にインストールしておく必要があります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■img2pdfモジュールのインストール
img2pdfモジュールのインストールは、今回はpipを経由してインストールしますので、まずWindowsのコマンドプロンプトを起動します。
pip install img2pdf
起動後、上記のコマンドを入力し、Enterキーを押します。
なお、今回は運営者はpythonランチャーを使用しており、Python Version 3.8.5にインストールを行うために、pipを使う場合にはコマンドでの切り替えを行います。
py -3.8 -m pip install img2pdf
切り替えるために、上記のコマンドを入力し、Enterキーを押します。
Collecting img2pdf
Downloading img2pdf-0.4.0.tar.gz (107 kB)
|████████████████████████████████| 107 kB 1.1 MB/s
Requirement already satisfied: Pillow in c:\pg\python38\lib\site-packages (from img2pdf) (8.0.1)
Collecting pikepdf
Downloading pikepdf-2.1.1-cp38-cp38-win_amd64.whl (2.2 MB)
|████████████████████████████████| 2.2 MB 1.7 MB/s
Requirement already satisfied: lxml>=4.0 in c:\pg\python38\lib\site-packages (from pikepdf->img2pdf) (4.6.1)
Using legacy ‘setup.py install’ for img2pdf, since package ‘wheel’ is not installed.
Installing collected packages: pikepdf, img2pdf
Running setup.py install for img2pdf … done
Successfully installed img2pdf-0.4.0 pikepdf-2.1.1
Enterキーを押すと、インストールが開始され、「Successfully installed」と表示されます。これが表示されれば、インストールは完了となります。
■画像ファイルを用意する
インストールが完了しましたので、次にPDFファイルに変換する画像を用意します。
今回用意したのは、売上計画書のpng形式の画像ファイルです。(uriage_keikaku.png)
ファイルが保存されている場所は「C:\Users\user\test」です。
■img2pdfを使用し画像をPDFファイルに変換する
画像ファイルの用意ができましたので、img2pdfを使用し画像をPDFファイルに変換するスクリプトを書いていきます。
■コード
#!python3.8 import img2pdf from PIL import Image import os img_path = r"C:\Users\user\test\uriage_keikaku.png" pdf_path = r"C:\Users\user\test\uriage_keikaku.pdf" image = Image.open(img_path) pdf_bytes = img2pdf.convert(image.filename) file = open(pdf_path,"wb") file.write(pdf_bytes) image.close() file.close() print("PDFファイルへの変換が成功しました")
インポートで、img2pdf,PIL,osモジュールを呼び出して、img_pathという変数を作成し、今回用意した画像ファイルを指定します。pdf_pathという変数も作成し、今回作成するPDFファイルの保存する場所、名前を指定します。
指定後、imageという変数を作成し、Image.open()で、今回用意した画像ファイルを開きます。
開いた後に、pdf_bytesという変数を作成し、img2pdf.convert()で、今回用意した画像ファイルを変換します。
変換後、fileという変数を作成し、pdf_pathで設定したPDFファイルをwbモードで開きます。
開いたPDFファイルに、変換した画像ファイルをfile.write()で書き込みます。書き込んだ後に保存して今回用意した画像ファイルとファイルを閉じます。
■実行
今回書いたスクリプトを「convert_img_to_pdf.py」という名前で保存し、コマンドプロンプトから実行してみます。
WARNING:root:Image contains transparency which cannot be retained in PDF.
WARNING:root:img2pdf will not perform a lossy operation.
WARNING:root:You can remove the alpha channel using imagemagick:
WARNING:root: $ convert input.png -background white -alpha remove -alpha off output.png
Traceback (most recent call last):
File “C:\Users\user\convert_img_to_pdf.py”, line 16, in <module>
pdf_bytes = img2pdf.convert(image.filename)
File “C:\pg\Python38\lib\site-packages\img2pdf.py”, line 2032, in convert
) in read_images(rawdata, kwargs[“colorspace”], kwargs[“first_frame_only”]):
File “C:\pg\Python38\lib\site-packages\img2pdf.py”, line 1409, in read_images
color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata(
File “C:\pg\Python38\lib\site-packages\img2pdf.py”, line 1186, in get_imgmetadata
raise AlphaChannelError(“Refusing to work on images with alpha channel”)
img2pdf.AlphaChannelError: Refusing to work on images with alpha channel
実行してみると、「WARNING(警告)」や「Error(エラー)」が表示されました。WARNINGの文章を翻訳すると、「画像にはPDFで保持できない透明度が含まれています」、「img2pdfは不可逆操作を実行しません。」、「imagemagickを使用してアルファチャンネルを削除できます。」、「input.png -background white -alpha remove -alpha offoutput.pngを変換します」といったものです。
どうやら、今回用意した画像が”png”形式であることが問題のようです。そこでpng形式を”jpg”形式に変換して、再度スクリプトを実行してみます。
実行してみると、今度は「PDFファイルへの変換が成功しました」と出力されました。
PDFファイルに変換されているか、ファイルの保存場所を確認すると、PDFファイルが生成されていることや、PDFファイルが問題なく開けることが確認できました。
コメント