DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

PythonでJPEGファイルからPDFファイルを作成、PDFファイルからJPEGファイルを生成する 備忘録

「複数の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 - 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)

 

 

<参考>

PDFファイルの画像ファイルへの変換 - Qiita

 

例えば、「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です。

ほとんど一緒で見分けが付きません。

f:id:DreamerDream:20220330133823p:plain

 

拡大すると「画像」だということが解ります。

f:id:DreamerDream:20220330133839p:plain

 

今回は以上です。

 

 

 

kampa.me