チュートリアル

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

チュートリアル»pdf python pagesetting

Displaying items by tag: pdf python pagesetting

PDFファイルを受け取ったりダウンロードしたりした際、一部のページが横向きや上下逆など、正しくない向きで表示されることがあります。そのような場合、PDFページを回転させることで、読みやすく適切な表示に修正できます。

本記事では、Spire.PDF for Python を使用して、PDFページをプログラムから回転する方法を紹介します。

Spire.PDF for Python のインストール

この機能を使用するには、Spire.PDF for Python と plum-dispatch v1.7.4 が必要です。Windows 環境では、以下の pip コマンドで簡単にインストールできます。

pip install Spire.PDF

または、Spire.PDF for Pythonのダウンロードページから直接ダウンロードして、プロジェクトに追加することもできます。

PythonでPDF内の特定ページを回転する

PDFページの回転は 90 度単位で行われ、0/90/180/270 度を指定できます。以下は、PDF内の特定ページを回転する手順です。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用してPDFファイルを読み込みます。
  • PdfDocument.Pages[pageIndex] プロパティを使用して、対象となるページを取得します。
  • PdfPageBase.Rotation.value プロパティを使用して、現在の回転角度を取得します。
  • 取得した回転角度に、希望する回転角度を加算します。
  • PdfPageBase.Rotation プロパティを使用して、新しい回転角度を設定します。
  • PdfDocument.SaveToFile() メソッドを使用して結果を保存します。

Pythonコード:PDF内の特定ページを回転

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成します
pdf = PdfDocument()

# PDFファイルを読み込みます
pdf.LoadFromFile("Sample.pdf")

# 1ページ目を取得します
page = doc.Pages.get_Item(0)

# 現在の回転角度を取得します
rotation = int(page.Rotation.value)

# 元の角度を基準に、時計回りに180度回転します
rotation += int(PdfPageRotateAngle.RotateAngle180.value)
if rotation >= 4:
    rotation -= 4
# PdfPageRotateAngle は 0~3 の循環する列挙型(0/90/180/270度)のため、
# 値が範囲を超えた場合は回り込み処理を行います
page.Rotation = PdfPageRotateAngle(rotation)

# 結果を保存します
pdf.SaveToFile("RotatePDFPage.pdf")
pdf.Close()

以下は、処理後のPDFファイルのプレビューです。

PythonでPDF内の特定ページを回転

PythonでPDF内のすべてのページを回転する

Spire.PDF for Python を使用すると、PDFファイル内のすべてのページをループ処理し、一括で回転させることもできます。手順は以下のとおりです。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用してPDFファイルを読み込みます。
  • ドキュメント内の各ページを順に処理します。
  • PdfPageBase.Rotation.value プロパティを使用して、現在の回転角度を取得します。
  • 取得した回転角度に、希望する回転角度を加算します。
  • PdfPageBase.Rotation プロパティを使用して、新しい回転角度を設定します。
  • PdfDocument.SaveToFile() メソッドを使用して結果を保存します。

Pythonコード:PDF内のすべてのページを回転

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成します
pdf = PdfDocument()

# PDFファイルを読み込みます
pdf.LoadFromFile("Sample.pdf")

# すべてのページをループ処理します
for i in range(pdf.Pages.Count):
    page = pdf.Pages.get_Item(i)

    # 現在の回転角度を取得します
    rotation = int(page.Rotation.value)

    # 元の角度を基準に、時計回りに180度回転します
    rotation += int(PdfPageRotateAngle.RotateAngle180.value)
    rotation += int(PdfPageRotateAngle.RotateAngle180.value)
    if rotation >= 4:
        rotation -= 4
    page.Rotation = PdfPageRotateAngle(rotation)

# 結果を保存します
pdf.SaveToFile("RotatePDF.pdf")
pdf.Close()

一時ライセンスの申請について

生成されたドキュメントから評価版のメッセージを削除したい場合や、機能制限を解除したい場合は、30日間の試用ライセンス を申請できます。

Published in ページの設定
Tagged under

PythonでPDFの空白ページを検出・削除する方法

PDF ドキュメントには、まれに空白ページが含まれていることがあります。こうしたページは閲覧体験を損なうだけでなく、ファイルサイズを無駄に大きくしたり、印刷時に紙の無駄を生む原因にもなります。
PDF の品質とプロフェッショナリズムを高めるためには、空白ページを検出して削除することが重要です。

この記事では、PythonSpire.PDF for Python、さらに Pillow を利用して、見た目にも正確に空白ページを検出・削除する方法を解説します。
見た目は空白でも実際には不可視要素(透明オブジェクトや白文字など)が含まれているケースにも対応します。

記事の構成

必要なライブラリのインストール

このチュートリアルでは、以下の2つの Python ライブラリを使用します:

  • Spire.PDF for Python:PDF の読み込みや空白ページの検出・削除に使用します。
  • Pillow:画像処理用ライブラリで、見た目が空白に見えるページを正確に判定するのに役立ちます。

インストールは次のコマンドで簡単に行えます:

pip install Spire.PDF Pillow

PythonでPDFの空白ページを正確に検出・削除する方法

Spire.PDF には、ページが完全に空であるかどうかを確認できる PdfPageBase.IsBlank() メソッドが用意されています。 しかし、ページによっては一見空白に見えても、白文字のテキストや透過画像、透かしなどが含まれている場合があります。 そのため、このメソッドだけでは正確に空白ページを検出できないケースがあります。

より精度を高めるために、この記事では次の2段階の検出方法を採用します:

  1. PdfPageBase.IsBlank() メソッドで完全に空のページを検出・削除する。
  2. 空白でないページを画像に変換し、Pillow を使って実際に真っ白なページかどうかを解析する。

注意点: PDF を画像に変換する際、有効なライセンスを適用していないと評価版の透かしが画像に追加されます。 これが検出結果に影響する可能性があるため、テスト時は一時ライセンスの取得をおすすめします。

一時ライセンスは E-iceblue セールスチーム へお問い合わせください。

また、小規模な処理であれば、透かしなしで基本機能を利用できる Free Spire.PDF for Python を使うこともできます。

PythonでPDFの空白ページを検出・削除する手順

以下の手順で空白ページの検出と削除を実装します。

  1. 空白画像を判定する関数 is_blank_image() を定義する Pillow を使用して、ページを画像に変換した結果が真っ白(全ピクセルが白)かどうかを判定します。

  2. PDFドキュメントを読み込む PdfDocument.LoadFromFile() メソッドを使って PDF ファイルを読み込みます。

  3. ページを順に確認する 各ページをループ処理で確認し、次の2つの条件をチェックします:

    • PdfPageBase.IsBlank()True の場合は、ページを直接削除します。
    • それ以外の場合は、ページを画像化して is_blank_image() 関数で分析します。
  4. 処理結果のPDFを保存する PdfDocument.SaveToFile() メソッドを使って、空白ページを削除した新しいPDFを保存します。

サンプルコード:

import io
from spire.pdf import PdfDocument
from PIL import Image

# ライセンスキーの適用
License.SetLicenseKey("License-Key")

# 画像が空白かどうかを確認する関数
def is_blank_image(image):
        img = image.convert("RGB")
        white_pixel = (255, 255, 255)
        return all(pixel == white_pixel for pixel in img.getdata())

# PDFを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("Sample1111.pdf")

# 削除時のインデックスずれを防ぐため、逆順でページを確認
for i in range(pdf.Pages.Count - 1, -1, -1):
    page = pdf.Pages[i]
    if page.IsBlank():
        pdf.Pages.RemoveAt(i)
    else:
        with pdf.SaveAsImage(i) as image_data:
            image_bytes = image_data.ToArray()
            pil_image = Image.open(io.BytesIO(image_bytes))
            if is_blank_image(pil_image):
                pdf.Pages.RemoveAt(i)

# 結果を保存
pdf.SaveToFile("RemoveBlankPages.pdf")
pdf.Close()

以下は、空白ページ削除後のプレビューです:

PythonでPDFの空白ページを削除した結果のプレビュー

よくある質問(FAQ)

Q1:PDFの「空白ページ」とはどのようなものですか?

A:完全に何もないページのほか、白文字や透過オブジェクト、透かしなど見えない要素を含むページも空白ページとみなされます。 このソリューションでは、2段階の検出で両方のケースに対応します。

Q2:Spire.PDFのライセンスがなくても使えますか?

A:はい、ライセンスなしでも動作します。ただし、PDFを画像に変換する際に評価版の透かしが追加されるため、空白ページ検出の精度に影響する可能性があります。 テスト用途の場合は、無料の一時ライセンスを申請するのがおすすめです。

Q3:Spire.PDFはどのPythonバージョンに対応していますか?

A:Spire.PDF for Python は Python 3.7以降 に対応しています。画像解析を行う場合は、Pillow も併せてインストールしてください。

Q4:削除せずに検出だけ行いたい場合は?

A:可能です。pdf.Pages.RemoveAt(i) の行をコメントアウトし、print()logging で空白ページのリストを出力するだけでOKです。

まとめ

PDF から不要な空白ページを削除することは、可読性の向上やファイルサイズの削減、そしてよりプロフェッショナルな仕上がりに欠かせない工程です。 Spire.PDF for PythonPillow を組み合わせることで、完全に空のページだけでなく、見た目は空白でも内部に不可視要素を含むページも正確に検出できます。

レポート生成、スキャン文書の整理、印刷前の最終調整など、あらゆるシーンで役立つ実用的な Python ソリューションです。

Published in ページの設定
Tagged under