PythonでPDFを画像に変換する(Windows10)

Windows10でPythonを使ってPDFを画像に変換するために、Windows10にPopplerとpdf2imageをインストールします。

目次

  1. PythonでPDFを画像に変換するには
  2. Popplerとは
  3. Popplerのインストール
  4. pdf2imageのインストール

PythonでPDFを画像に変換するには

標準モジュールでは変換できないので、pdf2imageというモジュールを使って変換します。

pdf2imageモジュールは、変換の際にPopplerという外部ツールを呼び出します。つまり、pdf2imageモジュールはPopplerのインターフェースになるわけです。

Popplerはpdf2imageモジュールとは別物ですので、Popplerとpdf2imageの両方をそれぞれインストールする必要があります。

Popplerとは

Poppler というのは、PDFの閲覧用のマルチプラットフォームのライブラリです。本投稿時点ではバージョン21で、GPLv2ライセンスです。

マルチプラットフォームなので、Windows用のものが存在します。ソースファイルが配布されているのですが、ビルド済みのものも公開されています。

Popplerのインストール

今回は、PyPlのpdf2imageのページでおすすめされているビルドをインストールします。

まず、こちらのサイト からビルド済みのアーカイブファイル(ZIPファイル)をダウンロードします。

次に、ダウンロードしたZIPファイルを展開して、適当なフォルダにコピーします。ここでは、C:\Program Files (x86)にコピーしました。

ファイルのコピー

そして、binというサブフォルダをPATHに追加します。なじみがない人も多いと思いますので、ここでは少し詳しく解説します。

Windows10では、検索欄にpathと入力するとコントロールパネルのシステム環境変数の編集という項目がタスクバーに表示されます。それを選択すると、システムのプロパティダイアログが開きます。

システムのプロパティ

その中の「環境変数」をクリックすると、環境変数のダイアログが開きます。

環境変数

環境変数ダイアログでpathという項目を選んで、「編集」をクリックすると、環境変数を編集するダイアログが開きます。

このダイアログで「新規」をクリックして、popplerをコピーしたディレクトリにあるbinフォルダを追加します。

環境変数の編集

試しにpopplerを動かしてみます。

popplerはいくつかのツールの集合体です。まずは、pdfinfo.exeを使ってみます。

コマンドプロンプトを開いて、pdfinfo -listencを実行すると、下記のように表示されます。

C:\>pdfinfo -listenc
Available encodings are:
.
..
ASCII7
Big5
Big5ascii
EUC-CN
EUC-JP
GBK
ISO-2022-CN
ISO-2022-JP
ISO-2022-KR
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
KOI8-R
Latin1
Latin2
Shift-JIS
Symbol
TIS-620
UTF-16
UTF-8
Windows-1255
ZapfDingbats

このコマンドは利用可能なエンコードを表示するものですが、リストの内容を見ると日本語はこのままで使えそうですね。

では、PDFをPNGファイルに変換してみましょう。

変換の元になるPDFはこんな感じです。当サイトのあるページを印刷したものです。広告の部分は、印刷後に塗りつぶしました。

変換元

popplerのコマンドラインプログラムでPDFをPNGに変換するには、下記のようにします。

> pdftoppm -f 1 -l 1 -png test.pdf test.png

変換したファイルはこのようになります。日本語が日本語でレンダリングされてますね。

変換後

pdf2imageのインストール

pipを使ってpdf2imageをインストールします。

> pip install pdf2image

pdf2imageを使ってみます。コードはこんな感じです。

from pdf2image import convert_from_path

images = convert_from_path('test.pdf')

images[0].save('out.png')

先ほどのPDFファイルを画像に変換して、最初のページをPNGファイルとして出力するプログラムです。

正しく出力されました。

変換後2

公開日

広告