チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»C++»Spire.XLS for C++»変換»C++:Excel を CSV におよび CSV を Excel に変換する方法
2026-11-14

Python で PDF を画像に変換する方法(ページ画像・切り出し・SVG)

提案書やカタログを PDF で受け取ったとき、その一部を画像として使いたい場面があります。Web ページのアイキャッチ、社内チャットへの貼り付け、資料のサムネイル——PDF のままでは扱いにくいところで、画像があると話が早く進みます。

本記事では、Spire.PDF for Python で PDF のページを画像にする手順を紹介します。1 ページずつ PNG に書き出す基本形から、背景を透明にする、ページの一部だけを切り出す、SVG のベクター形式で書き出すところまで、実際の出力を見ながら進めます。

クイックナビゲーション


PDF を画像にする 3 つの方法

Spire.PDF for Python では、PdfDocument.SaveAsImage() で 1 ページ分の画像を取得し、Save() でファイルに書き出します。用途に応じて、次の 3 通りの使い方ができます。

方法 出力される画像 向いている用途
そのまま書き出す ページ全体(余白を含む) サムネイル、資料のページ画像
背景を透明にする ページ全体+透過の背景 資料や Web ページに重ねる
切り出して書き出す 指定した矩形の範囲 表や図だけを抜き出す

これに加えて、SaveToFile() に FileFormat.SVG を指定すると、ページをベクター形式で書き出せます。文字と図形がそのまま残るため、拡大しても輪郭が崩れません。

画像の大きさは、ページサイズと解像度で決まります。既定は 96 dpi 相当で、A4 のページは 794 × 1,123 ピクセルです。SaveAsImage() に解像度を渡すと 300 dpi などの高精細な画像も書き出せ、A4 で 2,481 × 3,508 ピクセルになります。ページの一部だけを切り出すと、その範囲と解像度に応じた大きさの画像になります。


実行環境とサンプル PDF

pip install spire.pdf

スクリプトでは、spire.pdf から必要なクラスを読み込みます。座標を表す RectangleF もここに含まれています。

import os
from spire.pdf import *

サンプルには、A4・2 ページの提案書を用意しました。

ページ 内容
1 ページ目 タイトル帯、提案の概要、機種一覧の表、導入効果
2 ページ目 導入スケジュールの表、お見積り条件

1 ページ目の機種一覧は「機種・主な用途・台数・月額」の 4 列で、見出し行が濃紺、明細行が交互に色分けされています。切り出しの節では、この表の範囲だけを画像にします。


ページを PNG 画像として書き出す

まずは、すべてのページを PNG として書き出します。SaveAsImage() の引数はページ番号で、0 から始まる点に注意してください。

import os
from spire.pdf import *

os.makedirs("output/images", exist_ok=True)

# PDF を読み込む
pdf = PdfDocument()
pdf.LoadFromFile("製品導入提案書.pdf")
pages = pdf.Pages.Count

# 1 ページずつ画像として保存する
for i in range(pages):
    with pdf.SaveAsImage(i) as image:
        name = f"PageImage_{i + 1}.png"
        path = os.path.join("output/images", name)
        image.Save(path)
        print("保存しました:", name, os.path.getsize(path), "bytes")

pdf.Close()
print("ページ数:", pages)

SaveAsImage() は画像のストリームを返すので、with で受け取って Save() に渡します。ファイル名は 1 ページ目が PageImage_1.png になるよう、ループの添字に 1 を足しています。

変換前の PDF と、書き出した 1 ページ目の画像を並べると次のようになります。

PDF のページと書き出した PNG 画像の比較

このスクリプトを pdf_to_image.py として保存して実行すると、保存したファイル名とサイズが表示されます。

PDF から PNG への変換を実行したときのコンソール出力

2 ページの PDF から 2 枚の PNG ができました。ページ番号は 0 始まりなので、range(pdf.Pages.Count) で全ページを回り、保存するファイル名だけ 1 始まりに揃えると扱いやすくなります。

解像度(DPI)を指定する

SaveAsImage() の 2 番目と 3 番目の引数には、X 方向・Y 方向の解像度を指定できます。省略した場合は 96 dpi 相当で書き出されます。

import os
from spire.pdf import *

os.makedirs("output/images", exist_ok=True)

pdf = PdfDocument()
pdf.LoadFromFile("製品導入提案書.pdf")

# 300 dpi で書き出す
with pdf.SaveAsImage(0, 300, 300) as image:
    image.Save("output/images/PageImage_300dpi.png")

pdf.Close()
print("保存しました: output/images/PageImage_300dpi.png")

A4 のページは、既定の 96 dpi で 794 × 1,123 ピクセル、300 dpi で 2,481 × 3,508 ピクセルになります。印刷や拡大表示に耐える画像が必要なときは 300 dpi、Web のサムネイルなら 96〜150 dpi が目安です。

96 dpi と 300 dpi で書き出した画像の比較

同じ範囲を同じ大きさで表示すると、300 dpi のほうが文字の輪郭が滑らかになります。解像度は CropBox と組み合わせることもでき、切り出した範囲をその解像度で書き出します。


背景を透明にする

画像を資料や Web ページの上に重ねると、白い背景が四角い枠として見えてしまうことがあります。ConvertOptions.SetPdfToImageOptions() にアルファ値を渡すと、背景を透明にした PNG を書き出せます。

import os
from spire.pdf import *

os.makedirs("output/images", exist_ok=True)

pdf = PdfDocument()
pdf.LoadFromFile("製品導入提案書.pdf")

# 背景のアルファ値を 0 にする(0 = 完全に透明、255 = 不透明)
pdf.ConvertOptions.SetPdfToImageOptions(0)

for i in range(pdf.Pages.Count):
    with pdf.SaveAsImage(i) as image:
        image.Save(f"output/images/Transparent_{i + 1}.png")

pdf.Close()
print("保存しました: output/images/Transparent_*.png")

アルファ値は 0〜255 の範囲で指定します。0 にすると背景が完全に透明になり、128 のような中間の値にすると半透明の背景になります。文字や図形はそのままの濃さで描かれるため、背景だけが抜けた状態の PNG ができます。

背景ありの画像と背景を透明にした画像の比較

透明にした背景の上に色を敷くと、元の白い余白は消え、文字と表だけが残ります。透過は PNG のアルファチャンネルで表現されるため、背景を活かしたい場面では PNG で保存します。


ページの一部だけを画像にする

ページ全体ではなく、表や図だけを取り出したい場合は、CropBox でページの表示領域を絞ってから画像にします。

import os
from spire.pdf import *

os.makedirs("output/images", exist_ok=True)

pdf = PdfDocument()
pdf.LoadFromFile("製品導入提案書.pdf")

# 1 ページ目の表示領域を、機種一覧の表がある範囲に絞る
page = pdf.Pages.get_Item(0)
page.CropBox = RectangleF(44.0, 300.0, 456.0, 200.0)

# 絞った範囲を画像として保存する
with pdf.SaveAsImage(0) as image:
    image.Save("output/images/TableArea.png")

pdf.Close()
print("保存しました: output/images/TableArea.png")

CropBox に渡す RectangleF は、X 座標・Y 座標・幅・高さの順です。座標の原点はページの左上で、単位はポイント(1/72 インチ)です。A4 のページは 595 × 842 ポイントなので、上の指定は「左から 44、上から 300 の位置から、幅 456・高さ 200 の範囲」を意味します。

PDF の切り出し範囲と、切り出した画像

切り出した画像は 608 × 267 ピクセルで、見出しと表だけが入った状態になりました。範囲は「表の見出し行の少し上」から「最終行の下」までを含むように決めると、余白のバランスが取れます。座標を決めるときは、PDF を表示して目的の位置を確認しながら、上下左右を少しずつ調整すると早く合います。


SVG として書き出す

図や表を拡大しても崩れない形で残したい場合は、SVG への書き出しが向いています。SaveToFile() に FileFormat.SVG を指定します。

import os
from spire.pdf import *

os.makedirs("output/svg", exist_ok=True)

pdf = PdfDocument()
pdf.LoadFromFile("製品導入提案書.pdf")

# ページごとに SVG ファイルとして書き出す
pdf.SaveToFile("output/svg/提案書.svg", FileFormat.SVG)

pdf.Close()
print("保存しました:", sorted(os.listdir("output/svg")))

指定したファイル名をもとに、ページごとの SVG が作成されます。2 ページの PDF なら 提案書_1.svg と 提案書_2.svg の 2 ファイルができ、番号は 1 始まりです。

SVG として書き出したページ

SVG では文字がテキストのまま残り、フォントもファイル内に埋め込まれます。ブラウザで開いて拡大しても輪郭が滑らかなのは、ラスタ画像との大きな違いです。PNG は写真や複雑なグラデーション、SVG は表・図・文字が多いページ、というように使い分けると扱いやすくなります。逆方向の変換は Python で SVG ファイルを PDF 形式に変換・保存する方法 で解説しています。


まとめ

本記事では、Spire.PDF for Python で PDF を画像に変換する方法を紹介しました。

  1. ページ画像を書き出す — SaveAsImage() で 1 ページ分のストリームを取得し、Save() で PNG として保存します。解像度は 2 番目・3 番目の引数で指定できます。
  2. 背景を透明にする — SetPdfToImageOptions(0) で背景が透過した PNG になります。
  3. 一部を切り出す — CropBox に RectangleF(左, 上, 幅, 高さ) を指定します。
  4. SVG で書き出す — SaveToFile() に FileFormat.SVG を指定すると、ページごとの SVG ができます。

ページ番号を変えれば任意のページを画像にできるので、サムネイル生成やページプレビューの処理にもそのまま組み込めます。TIFF 形式の扱いは Python で PDF と TIFF を相互変換 で解説しています。全機能を評価したい場合は、30 日間の無料ライセンスを申請 できます。


FAQ

特定のページだけを画像にできますか?

SaveAsImage() に渡すページ番号を変えるだけです。たとえば 1〜3 ページ目だけを画像にする場合は、for i in range(3): のようにループの範囲を絞ります。ページ番号は 0 始まりなので、3 ページ目は 2 を指定します。

複数の PDF をまとめて画像にできますか?

できます。ファイルパスのリストを用意し、PDF を読み込んでページ数だけループする処理を、リストの件数分繰り返します。保存先のフォルダを PDF のファイル名ごとに分けておくと、後から見分けやすくなります。

パスワードで保護された PDF も画像にできますか?

LoadFromFile() の 2 番目の引数にパスワードを渡すと読み込めます。

pdf = PdfDocument()
pdf.LoadFromFile("protected.pdf", "password")

画像の解像度は変えられますか?

変えられます。SaveAsImage(ページ番号, X 方向の dpi, Y 方向の dpi) のように解像度を渡します。省略すると 96 dpi 相当で、A4 のページは 794 × 1,123 ピクセル、300 dpi を指定すると 2,481 × 3,508 ピクセルになります。

透過した背景はどの形式で保存すればよいですか?

PNG で保存します。PNG はアルファチャンネルを持つため、背景の透明さがそのまま保たれます。資料の上に重ねる、アイキャッチを作る、といった用途に向いています。

PDF に埋め込まれた画像だけを取り出せますか?

ページを画像にするのではなく、PDF の中の画像をそのまま取り出す方法は PythonでPDFから画像を抽出する完全ガイド で解説しています。ページ全体を画像にしたい場合は、本記事の SaveAsImage() を使います。

Read 6 times