「複数のjpegファイルを集めて1つのPDFファイルにしたい」と調べてpythonのライブラリ「img2pdf」を発見しました。
pipでインストール出来るとのことで早速インストールを試みましたが、
sudo pip3 install img2pdf
エラー!!
....(略)
src/qpdf/annotation.cpp:9:10: 致命的エラー: qpdf/Constants.h: No such file or directory
#include <qpdf/Constants.h>
^~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
error: command 'gcc' failed with exit status 1
どうやらgccというライブラリが不良のようで、調べてもよく解らなかったのですが、結論としてはpipのバージョンが低いのが原因だったようです。
pip3 install --upgrade pip
でアップデートしたら問題なくインストール出来ました。
<参考>
コード
#!python3
import img2pdf
path_pdf = '(PDF出力のフルパス.pdf)'
path_imgdir = '(画像のあるディレクトリ)'
#明示的にリストを作る(os.listdirとかで一覧作ってもOK!)
filenames = ['test_3715.jpg','test_0719.jpg','test_9163551.jpg']
#フルパスのリスト
images = [ path_imgdir + p for p in filenames ]
#PDF生成
with open( path_pdf , "wb") as f:
f.write(img2pdf.convert(images))
これで JPEG => PDF への変換が出来ました。
ちなみに、JPEG以外のPNGやGIFではエラーが出てしまうので他の形式の場合は一度JPEGに変換する必要があるようです。
<参考>
python - 複数のjpegファイルを一つのpdfファイルに変換したい - スタック・オーバーフロー
逆に、PDF => JPEG への変換も当然同じライブラリでできるだろうと思っていましたが、似た名前で別物のライブラリが必要だそうです。
こちらは「pdf2image」というライブラリ。
先程のが「img2pdf」なのでちょっと違う。
ここでライブラリ名の「2(two)」が「to」を意味していると初めて気が付きました。「img to pdf」ということなのですね!ナルホド!そういえば2のつくライブラリって結構ありますね。^^:そういう意味だったのか、気付かなかった。。
pdf2imageライブラリのインストールは先程と同じpipで出来ます。
sudo pip3 install pdf2image
このライブラリはpopplerというPDF作成ライブラリのラッパライブラリだそうで、popplerをインストールする必要があるようです。
CentOSの場合は
sudo yum install poppler-utils.x86_64
で無事にインストール出来ました。
コード
# -*- coding: utf-8 -*-
from pathlib import Path
from pdf2image import convert_from_path
# PDFファイルのパス
pdf_path = Path("(PDFファイルのフルパス)")
#outputのディレクトリパス
img_path=Path("(変換した画像を保存するディレクトリ)/jpgs")
#変換はこの部分だけ
convert_from_path(pdf_path, output_folder=img_path,fmt='jpeg',output_file=pdf_path.stem)
<参考>
例えば、「testpdf.pdf」というPDFファイルを変換すると
「jpgs」ディレクトリに
testpdf0001-1.jpg testpdf0001-2.jpg testpdf0001-3.jpg testpdf0001-4.jpg testpdf0001-5.jpg testpdf0001-6.jpg testpdf0001-7.jpg
という画像が保存されます。
変換も日本語に対応しているようです。
左側がjpeg変換したファイル、右が元のPDFです。
ほとんど一緒で見分けが付きません。
拡大すると「画像」だということが解ります。
今回は以上です。