0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでPDFをTIFFに、またはTIFFをPDFに変換する

Posted at

PDFは、デジタル文書管理の分野で一般的に使用されているフォーマットの1つで、主にテキスト、画像、表、リンクなどを含む複雑な文書の保存と共有に使用されます。一方、TIFF (Tagged Image File Format) は、画像処理の分野で一般的に使用され、主に高品質の画像ファイルの保存に使用されます。
実際には、さまざまなシナリオに適応するために、PDFファイルをTIFF画像に変換したり、TIFFをPDFに変換したりする必要がある場合があります。この記事では、PDFとTIFFフォーマットの相互変換を実現するためにPythonを使用する方法を紹介します。

必要なPythonライブラリ

  • Spire.PDF for Python - Python プログラムで PDF ドキュメントの作成、読み込み、編集、変換、保存をサポートするサードパーティライブラリ。
  • Pillow - Python の画像処理ライブラリ(PIL ライブラリベース)。JPEG, PNG, GIF, TIFF, BMP など幅広い画像フォーマットをサポートしており、画像の読み込み・変更・作成・保存を行う関数を提供。

これら2つのPythonライブラリは、以下のpipコマンドを使ってインストールできる:

pip install Spire.Pdf
pip install pillow

PythonでPDFファイルを複数ページのTIFF画像に変換する

TIFFフォーマットは複数ページの画像の保存をサポートしているため、スキャンした本や新聞、レポートなど、複数の画像やページを含む文書の保存や配布に最適です。PDFファイルをTIFFに変換するには、Spire.PDF for Pythonライブラリが提供するインターフェースを使用してPDF内の各ページを画像ストリームに変換し、Pillowライブラリを使用してこれらの画像ストリームを1つの連続した複数ページのTIFFファイルにマージする必要があります。

主な手順と方法は以下の通り:

  1. PDF ファイルを読み込むには、PdfDocument クラスの LoadFromFile() メソッドを使用します;
  2. PDFページを画像に変換する:
    • PDFファイルの各ページを繰り返し処理します;
    • PdfDocumentクラスのSaveAsImage()メソッドを使用して、各ページを画像ストリームに変換します;
    • Pillowライブラリを使用して画像ストリームをImageオブジェクトに変換し、リストに追加します。
  3. リ ス ト 内の画像を複数ページ TIFF フ ァ イ ル と し て保存 し ます。

Pythonのコード:

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

from PIL import Image
from io import BytesIO

# PDF文書を読み込む
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")

# リストを作成する
images = []

# PDF文書内のすべてのページを反復処理する
for i in range(pdf.Pages.Count):

    # 指定されたページを画像ストリームに変換する
    with pdf.SaveAsImage(i) as imageData:

        # 画像ストリームを画像オブジェクトに変換する
        img = Image.open(BytesIO(imageData.ToArray())) 

        # 変換された画像オブジェクトをリストに追加する
        images.append(img)

# 最初の画像をベースとして使用し、残りの画像をこのベースに追加して、連続した複数ページのTIFFファイルを形成する
images[0].save("PDFtoTIFF.tiff", save_all=True, append_images=images[1:])

# リソースの解放
pdf.Dispose()

生成されたTIFFファイル:
PDF-TIFF日.png

PythonでTIFF画像をPDFファイルに変換する

複数ページのTIFF画像をPDF文書に変換するには、まずPillowライブラリを使ってTIFF画像の各フレームを分割してPNG画像として保存し、次にSpire.PDF for Pythonライブラリを使ってこれらの画像をPDFページに描画する必要があります。

主な手順と方法は以下の通り:

  1. PdfDocumentオブジェクトを作成する
  2. Pillowライブラリを使用してTIFF画像ファイルを読み込む
  3. TIFF画像のフレームを処理する
    • TIFF画像の各フレームを繰り返し処理します
    • 現在のフレームを取得し、Pillowライブラリが提供するcopy()メソッドを使用して現在のフレームをコピーします
    • Pillowライブラリが提供するsave()メソッドを使用して、現在のフレームを指定された形式の画像ファイルとして保存します
    • Spire.PDFライブラリを使用して、画像ファイルをPDF画像オブジェクトに変換します。
  4. 画像をPDFページに描画します
    • PdfDocument.Pages.Add() メ ソ ッ ド を使っ て、 PDF 文書内にページ を追加 し ます
    • PdfPageBase.Canvas.DrawImage()メソッドを使用して、PDFページ上に画像を描画します
  5. PDFファイルを保存します。

Pythonのコード:

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

from PIL import Image
import io

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

# マージンの設定
pdf.PageSettings.SetMargins(0.0)

# TIFF画像の読み込み
tiff_image = Image.open("PDFtoTIFF.tiff")

# 各フレームを繰り返し処理する
for i in range(tiff_image.n_frames):

    # 現在のフレームを取得
    tiff_image.seek(i)
    
    # 現在のフレームをコピーし、PNG画像ファイルとして保存する。
    tiff_image.copy().save("output_frame_{i}.png")
    
    # PNG画像ファイルをPDF画像オブジェクトに変換する
    image = PdfImage.FromFile("output_frame_{i}.png")

    # 画像の幅と高さを取得する
    width = image.PhysicalDimension.Width
    height = image.PhysicalDimension.Height

    # PDF内の画像と同じサイズのページを追加する
    page = pdf.Pages.Add(SizeF(width, height))

    # ページ上の指定された位置に画像を描画します
    page.Canvas.DrawImage(image, 0.0, 0.0, width, height)

# PDF文書を保存する
pdf.SaveToFile("TIFFtoPDF.pdf",FileFormat.PDF)

# リソースの解放
pdf.Dispose()

生成されたPDFファイル:

TIFFtoPDF.png


赤い透かしを消すには、クリックして1ヶ月の無料ライセンスを申請してください:

PDF Python ライブラリがサポートするその他の PDF 変換関数:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?