チュートリアル

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

Super User

Super User

PDF ドキュメント内の画像の透過度を設定することは、プロフェッショナルな仕上がりを実現するうえで非常に重要です。これにより、画像の縁を目立たせずに重ね合わせたり、背景や下層のコンテンツと自然に一体化させたりすることができます。この操作は見た目の魅力を高めるだけでなく、特にグラフィック要素の多いドキュメントにおいて、洗練された統一感のある印象を与えます。この記事では、Spire.PDF for Python を使用して、Python プログラム内で PDF 画像の透過度を効果的に設定する方法を紹介します。

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

この操作には Spire.PDF for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。

pip install Spire.PDF

PDF に透明度を指定して画像を追加する

Spire.PDF for Python では、PdfPageBase.Canvas.DrawImage() メソッドを使用して指定位置に画像を描画できます。描画前に PdfPageBase.Canvas.SetTransparency() メソッドを呼び出すことで、描画する画像の透明度を設定できます。以下の手順で操作します。

  1. PdfDocument クラスのオブジェクトを作成し、LoadFromFile() メソッドでPDFを読み込みます。
  2. Pages.get_Item() メソッドで対象ページを取得します。
  3. PdfImage.FromFile() メソッドで画像を読み込みます。
  4. Canvas.SetTransparency() メソッドで透明度を設定します。
  5. Canvas.DrawImage() メソッドで画像を描画します。
  6. SaveToFile() メソッドでPDFを保存します。
from spire.pdf import *

# PdfDocumentインスタンスを作成
pdf = PdfDocument()

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

# 1ページ目を取得
page = pdf.Pages.get_Item(0)

# 画像を読み込み
image = PdfImage.FromFile("Screen.jpg")

# キャンバスの透明度を設定(0~1の範囲で指定)
page.Canvas.SetTransparency(0.2)

# 指定位置に画像を描画
page.Canvas.DrawImage(image, PointF(80.0, 200.0))

# ドキュメントを保存
pdf.SaveToFile("output/AddTranslucentPicture.pdf")
pdf.Close()

上記のコードでは、透明度0.2(20%)で画像がページに追加されます。これにより、背景との自然な重なりを実現できます。

実行結果プレビュー

PythonでPDFに透明度を指定して画像を追加する

既存画像の透明度を調整する

すでにPDF内に存在する画像の透明度を変更するには、その画像を取得して削除し、同じ位置に指定した透明度で再描画します。これにより、画像の位置を保ったまま不透明度を調整できます。手順は以下の通りです。

  1. PdfDocument クラスのオブジェクトを作成し、LoadFromFile() メソッドでPDFを読み込みます。
  2. Pages.get_Item() メソッドで対象ページを取得します。
  3. ImagesInfo[] 配列から画像のストリームと座標情報(Bounds)を取得します。
  4. DeleteImage() メソッドで元の画像を削除します。
  5. PdfImage.FromStream() メソッドで新しい画像インスタンスを作成します。
  6. Canvas.SetTransparency() メソッドで透明度を設定します。
  7. Canvas.DrawImage() メソッドで同じ位置に再描画します。
  8. SaveToFile() メソッドで保存します。
from spire.pdf import *

# PdfDocumentインスタンスを作成
pdf = PdfDocument()

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

# 1ページ目を取得
page = pdf.Pages.get_Item(0)

# ページ上の最初の画像とその位置を取得
imageHelper = PdfImageHelper()
imagesInfo = imageHelper.GetImagesInfo(page)
imageStream = imagesInfo[0].Image
bounds = imagesInfo[0].Bounds

# 元の画像を削除
imageHelper.DeleteImage(imagesInfo[0])

# ストリームから新しい画像を生成
image = PdfImage.FromStream(imageStream)

# 透明度を設定
page.Canvas.SetTransparency(0.3)

# 同じ位置に再描画
page.Canvas.DrawImage(image, bounds)

# ドキュメントを保存
pdf.SaveToFile("output/SetExistingImageTransparency.pdf")
pdf.Close()

この方法を使うことで、既存の画像を保持したまま透明度のみを変更できます。

実行結果プレビュー

PythonでPDFに既存画像の透明度を調整する

一時ライセンスの申請

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

スタンプはPDFドキュメント内で特定のエリアやセクションをマーク・注釈するための強力なツールです。承認やレビュー、状態表示などに広く使用されており、チームでのコラボレーションや文書管理の効率を大幅に向上させます。PDFにおけるスタンプは、チェックマークのような単純なものから、カスタマイズされた画像、日時スタンプ、署名など、さまざまな形式を取ることができます。この記事では、Spire.PDF for Python を使用して PythonでPDFに画像スタンプおよび動的スタンプを追加する方法 を解説します。

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

この操作には Spire.PDF for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.PDF for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。

pip install Spire.PDF

Python で PDF に画像スタンプを追加する方法

Spire.PDF for Python では、PDFドキュメント内のゴム印(ラバースタンプ)を表すために PdfRubberStampAnnotation クラスを使用します。スタンプの外観を作成するには、PdfTemplate クラスを利用します。PdfTemplate はテキスト、画像、日付や時刻など任意の情報を描画できるキャンバスのようなものです。

画像スタンプは、ロゴ、署名、透かし、または任意のカスタムグラフィックをPDF上に重ねる用途に使えます。Spire.PDF for Python を使用して画像スタンプをPDFに追加する主な手順は以下の通りです。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用してPDFファイルを読み込みます。
  • PdfImage.FromFile() メソッドでPDFに追加する画像を読み込みます。
  • 画像サイズに基づいて PdfTemplate オブジェクトを作成します。
  • PdfTemplate.Graphics.DrawImage() メソッドで画像をテンプレート上に描画します。
  • PdfRubberStampAnnotation オブジェクトを作成し、テンプレートを外観として設定します。
  • PdfPageBase.AnnotationsWidget.Add() メソッドを使用して、特定のページにスタンプを追加します。
  • PdfDocument.SaveToFile() メソッドでPDFを保存します。
from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentオブジェクトを作成
doc = PdfDocument()

# PDFを読み込み
doc.LoadFromFile("Sample.pdf")

# 指定ページを取得
page = doc.Pages[0]

# 画像ファイルを読み込み
image = PdfImage.FromFile("Stamp.png")

# 画像の幅と高さを取得
width = (float)(image.Width)
height = (float)(image.Height)

# 画像サイズに基づいてPdfTemplateオブジェクトを作成
template = PdfTemplate(width, height, True)

# テンプレート上に画像を描画
template.Graphics.DrawImage(image, 0.0, 0.0, width, height)

# ラバースタンプ注釈を作成(位置とサイズを指定)
rect = RectangleF((float)(page.ActualSize.Width - width - 50), (float)(10), width, height)
stamp = PdfRubberStampAnnotation(rect)

# PdfAppearanceオブジェクトを作成
pdfAppearance = PdfAppearance(stamp)

# テンプレートを外観の通常状態として設定
pdfAppearance.Normal = template

# スタンプに外観を適用
stamp.Appearance = pdfAppearance

# PDFにスタンプを追加
page.AnnotationsWidget.Add(stamp)

# ファイルを保存
doc.SaveToFile("output/ImageStamp.pdf")
doc.Close()

実行結果プレビュー

PythonでPDFに画像スタンプを追加する

PDFに画像スタンプを追加する方法を理解したら、PythonでPDFに画像を挿入する方法 もあわせてご覧ください。

Python で PDF に動的スタンプを追加する方法

静的スタンプとは異なり、動的スタンプは日付、時刻、ユーザー情報などの可変データを含むことができます。以下では、Spire.PDF for Python を使用してPDFに動的スタンプを作成する手順を説明します。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用してPDFを読み込みます。
  • 任意のサイズで PdfTemplate オブジェクトを作成します。
  • PdfTemplate.Graphics.DrawString() メソッドを使用してテンプレート上に文字列を描画します。
  • PdfRubberStampAnnotation オブジェクトを作成し、テンプレートを外観として設定します。
  • PdfPageBase.AnnotationsWidget.Add() メソッドで特定のページにスタンプを追加します。
  • PdfDocument.SaveToFile() メソッドでPDFを保存します。
from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentオブジェクトを作成
doc = PdfDocument()

# PDFを読み込み
doc.LoadFromFile("Sample.pdf")

# 指定ページを取得
page = doc.Pages[0]

# PdfTemplateオブジェクトを作成
template = PdfTemplate(220.0, 50.0, True)

# フォントを作成
font1 = PdfTrueTypeFont("Yu Gothic UI", 16.0, 0, True)
font2 = PdfTrueTypeFont("Yu Mincho", 10.0, 0, True)

# ブラシを作成
solidBrush = PdfSolidBrush(PdfRGBColor(Color.get_Blue()))
rectangle1 = RectangleF(PointF(0.0, 0.0), template.Size)
linearGradientBrush = PdfLinearGradientBrush(rectangle1, PdfRGBColor(Color.get_White()), PdfRGBColor(Color.get_LightBlue()), PdfLinearGradientMode.Horizontal)

# ペンを作成
pen = PdfPen(solidBrush)

# 角丸矩形パスを作成
CornerRadius = 10.0
path = PdfPath()
path.AddArc(template.GetBounds().X, template.GetBounds().Y, CornerRadius, CornerRadius, 180.0, 90.0)
path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y, CornerRadius, CornerRadius, 270.0, 90.0)
path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 0.0, 90.0)
path.AddArc(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 90.0, 90.0)
path.AddLine(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, template.GetBounds().X, template.GetBounds().Y + CornerRadius / 2)

# パスをテンプレート上に描画
template.Graphics.DrawPath(pen, path)
template.Graphics.DrawPath(linearGradientBrush, path)

# テンプレート上にテキストを描画
string1 = "承認済み\n"
string2 = "山田による承認時刻: " + DateTime.get_Now().ToString("HH:mm, MMM dd, yyyy")
template.Graphics.DrawString(string1, font1, solidBrush, PointF(5.0, 5.0))
template.Graphics.DrawString(string2, font2, solidBrush, PointF(2.0, 28.0))

# スタンプ注釈を作成(位置とサイズを指定)
rectangle2 = RectangleF((float)(page.ActualSize.Width - 220.0 - 50.0), (float)(page.ActualSize.Height - 60.0), 220.0, 50.0)
hanko = PdfRubberStampAnnotation(rectangle2)

# PdfAppearanceオブジェクトを作成し、テンプレートを通常状態に設定
appearance = PdfAppearance(hanko)
appearance.Normal = template

# 外観をスタンプに適用
hanko.Appearance = appearance

# スタンプを注釈コレクションに追加
page.AnnotationsWidget.Add(hanko)

# PDFを保存
doc.SaveToFile("output/DynamicStamp.pdf", FileFormat.PDF)
doc.Dispose()

実行結果プレビュー

PythonでPDFに動的スタンプを追加する

一時ライセンスの申請

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

PDF に補足資料を直接組み込むことで、関連情報を 1 つのファイルにまとめられ、整理、共有、アーカイブが容易になります。この機能により、ユーザーは補助的なドキュメント、画像、マルチメディア要素をシームレスに共有でき、別々のファイル転送や外部リンクを必要としません。コミュニケーションの効率化、作業効率の向上、受信者が必要な資料に便利にアクセスできることを実現します。本記事では、Python と 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のダウンロードページから直接ダウンロードして、プロジェクトに追加することもできます。

基礎知識

PDF には一般的に 2 種類の添付方法があります。すなわち、ドキュメントレベルの添付と注釈添付です。Spire.PDF for Python は両方に対応しています。以下の表に両者の違いをまとめます。

添付タイプ 表すクラス 定義
ドキュメントレベルの添付 PdfAttachment クラス PDF のドキュメントレベルに添付されたファイルはページ上には表示されませんが、PDF リーダーの「添付ファイル」パネルで確認できます。
注釈添付 PdfAnnotationAttachment クラス 注釈として添付されたファイルはページ上または「添付ファイル」パネルで確認可能です。注釈添付はページ上にクリップアイコンとして表示され、クリックするとファイルを開けます。

Python で PDF ドキュメントにファイルを添付する

ドキュメントレベルで PDF にファイルを添付するには、まず外部ファイルに基づいて PdfAttachment オブジェクトを作成し、PdfDocument.Attachments.Add() メソッドを使って PDF ドキュメントに追加します。詳細な手順は以下の通りです。

  1. PdfDocument オブジェクトを作成します。
  2. PdfDocument.LoadFromFile() メソッドで PDF を読み込みます。
  3. 外部ファイルに基づいて PdfAttachment オブジェクトを作成します。
  4. PdfDocument.Attachments.Add() メソッドで添付ファイルを追加します。
  5. PdfDocument.SaveToFile() メソッドで別名 PDF として保存します。
from spire.pdf import *
from spire.pdf.common import *

# PdfDocument オブジェクトを作成
doc = PdfDocument()

# サンプル PDF を読み込む
doc.LoadFromFile("Sample.pdf")

# 外部ファイルに基づき PdfAttachment オブジェクトを作成
attachment_one = PdfAttachment("Orders.xlsx")
attachment_two = PdfAttachment("Logo.png")

# PDF に添付ファイルを追加
doc.Attachments.Add(attachment_one)
doc.Attachments.Add(attachment_two)

# ファイルとして保存
doc.SaveToFile("output/DocumentAttachment.pdf")

出力 PDF のプレビューはこちらです。

Add Document Attachment to PDF with Python

おすすめ参考: Python で PDF に画像を追加する方法

Python で PDF に注釈としてファイルを添付する

注釈添付は PdfAttachmentAnnotation クラスで表されます。このクラスのインスタンスを作成し、境界、フラグ、テキストなどの属性を設定してから、PdfPageBase.AnnotationsWidget.Add() メソッドで指定ページに追加します。

Spire.PDF for Python を使用して注釈としてファイルを添付する手順は以下の通りです:

  1. PdfDocument オブジェクトを作成します。
  2. PdfDocument.LoadFromFile() メソッドで PDF を読み込みます。
  3. PdfDocument.Pages[] プロパティで注釈を追加するページを取得します。
  4. 外部ファイルに基づき PdfAttachmentAnnotation オブジェクトを作成します。
  5. PdfPageBase.AnnotationsWidget.Add() メソッドでページに添付注釈を追加します。
  6. PdfDocument.SaveToFile() メソッドで別名 PDF として保存します。
from spire.pdf import *
from spire.pdf.common import *

# PdfDocument オブジェクトを作成
doc = PdfDocument()

# サンプル PDF を読み込む
doc.LoadFromFile("Sample.pdf")

# 特定のページを取得
page = doc.Pages[1]

# PDF に文字列を描画
str = "こちらがレポートです:"
font = PdfTrueTypeFont("Yu Gothic UI", 16.0, PdfFontStyle.Bold, True)
x = 50.0
y = doc.Pages[0].ActualSize.Height - 30.0
page.Canvas.DrawString(str, font, PdfBrushes.get_Blue(), x, y)

# 外部ファイルに基づき PdfAttachmentAnnotation オブジェクトを作成
data = Stream("Report.docx")
size = font.MeasureString(str)
bounds = RectangleF((x + size.Width + 5.0), y, 10.0, 15.0)
annotation = PdfAttachmentAnnotation(bounds, "Report.docx", data)

# 注釈の色、フラグ、アイコン、テキストを設定
annotation.Color = PdfRGBColor(Color.get_Blue())
annotation.Flags = PdfAnnotationFlags.Default
annotation.Icon = PdfAttachmentIcon.Graph
annotation.Text = "ファイルを開くにはクリック"

# 添付注釈を PDF に追加
page.AnnotationsWidget.Add(annotation)

# ファイルとして保存
doc.SaveToFile("output/AnnotationAttachment.pdf")

出力 PDF のプレビューはこちらです。

Add Annotation Attachment to PDF with Python

詳細参考: Python で PDF ページにアクションを追加する方法

一時ライセンスの申請

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

PDF ドキュメントのインタラクティブ性と利便性を向上させる強力な機能の一つに、ドキュメント内でのアクションがあります。ドキュメント内にページ移動、ナビゲーション制御、あるいはメディア再生などのアクションを埋め込むことで、ユーザーは静的なドキュメントを動的なツールに変換でき、ワークフローの効率化、ユーザーのエンゲージメント向上、ルーチンタスクの自動化を実現できます。これにより、PDF の利用はこれまで以上に効率的かつ多用途になります。本記事では、Spire.PDF for Python を使って 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 にナビゲーションアクションを作成する

ナビゲーションボタンは、ユーザーがドキュメント内の指定ページの特定の位置にジャンプできるアクションです。開発者は PdfDestination オブジェクトを作成し、それを使って PdfGoToAction を作成し、さらにこのアクションに基づいて注釈を作成し、ページに追加することでナビゲーションボタンを完成させます。詳細な手順は以下の通りです:

  1. PdfDocument クラスのオブジェクトを作成し、PdfDocument.LoadFromFile() メソッドで PDF ドキュメントを読み込みます。
  2. PdfDestination オブジェクトを作成し、そのプロパティを設定します。
  3. 目的地に基づいて PdfGoToAction オブジェクトを作成します。
  4. PdfPageBase.Canvas.DrawRectangle() メソッドを使ってページ上に矩形を描画します。
  5. アクションに基づいて PdfActionAnnotation オブジェクトを作成し、PdfPageBase.Annotations.Add() メソッドでページに追加します。
  6. PdfDocument.SaveToFile() メソッドでドキュメントを保存します。
from spire.pdf import *

# PdfDocument クラスのインスタンスを作成し PDF ドキュメントを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# PdfDestination インスタンスを作成しプロパティを設定
destination = PdfDestination(pdf.Pages[0])
destination.Location = PointF(0.0, 0.0)
destination.Mode = PdfDestinationMode.Location
destination.Zoom = 0.8

# 矩形を作成
rect = RectangleF.FromLTRB(70, pdf.PageSettings.Size.Height - 120, 140, pdf.PageSettings.Size.Height - 100)

# PdfGoToAction インスタンスを作成
action = PdfGoToAction(destination)

# 2 ページ目に矩形を描画
pdf.Pages.get_Item(1).Canvas.DrawRectangle(PdfBrushes.get_LightGray(), rect)

# ボタンのテキストを描画
font = PdfTrueTypeFont("Yu Gothic UI", 12.0, PdfFontStyle.Regular, True)
stringFormat = PdfStringFormat(PdfTextAlignment.Center)
pdf.Pages.get_Item(1).Canvas.DrawString("ページ1に移動", font, PdfBrushes.get_Green(), rect, stringFormat)

# PdfActionAnnotation インスタンスを作成
annotation = PdfActionAnnotation(rect, action)

# 注釈を 2 ページ目に追加
pdf.Pages.get_Item(1).Annotations.Add(annotation)

# ドキュメントを保存
pdf.SaveToFile("output/AddPDFNavigationButton.pdf")
pdf.Close()

結果ドキュメントのプレビューはこちらです。

PythonでPDFにナビゲーションアクションを追加

関連記事:PythonでPDFにテキストを追加する方法

Python で PDF にサウンドアクションを作成する

開発者は PDF ドキュメント内に音声をアクションとして埋め込むことができ、ユーザーが特定の操作を行ったとき(ファイルを開いたときやボタンをクリックしたときなど)に音声を再生できます。サウンドアクションを作成する手順は以下の通りです:

  1. PdfDocument クラスのインスタンスを作成します。
  2. PdfDocument.LoadFromFile() メソッドで PDF ドキュメントを読み込みます。
  3. オーディオファイルを使って PdfSoundAction クラスのインスタンスを作成します。
  4. PdfSound クラスのプロパティを通して音声パラメータを設定します。
  5. PdfSoundAction クラスのプロパティを通して再生パラメータを設定します。
  6. PdfDocument.Pages.get_Item() メソッドでページを取得します。
  7. PdfPageBase.Canvas.Draw() メソッドでページに画像を描画します。
  8. 画像の位置に PdfActionAnnotation オブジェクトを作成してサウンドアクションを設定します。
  9. 注釈をページに追加します。 または、PdfDocument.AfterOpenAction プロパティを使って、ドキュメントを開いた後にサウンドアクションを実行させることもできます。この場合、PDF ページに注釈として追加する必要はありません。
  10. PdfDocument.SaveToFile() メソッドでドキュメントを保存します。
from spire.pdf import *

# PdfDocument インスタンスを作成し PDF ファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# ドキュメントの最初のページを取得
page = pdf.Pages.get_Item(0)

# サウンドファイルパスで PdfSoundAction インスタンスを作成
soundAction = PdfSoundAction("Wave.wav")

# 音声パラメータを設定
soundAction.Sound.Bits = 16
soundAction.Sound.Channels = PdfSoundChannels.Stereo
soundAction.Sound.Encoding = PdfSoundEncoding.Signed
soundAction.Sound.Rate = 44100

# 再生パラメータを設定
soundAction.Volume = 0.5
soundAction.Repeat = True
soundAction.Mix = True
soundAction.Synchronous = False

# ページに画像を描画
image = PdfImage.FromFile("Sound.png")
page.Canvas.DrawImage(image, PointF(30.0, 30.0))

# サウンドアクションで PdfActionAnnotation インスタンスを作成
rect = RectangleF.FromLTRB(30.0, 30.0, image.GetBounds().Width + 30.0, image.GetBounds().Height + 30.0)
annotation = PdfActionAnnotation(rect, soundAction)

# 注釈をページに追加
page.Annotations.Add(annotation)

# ドキュメントを開いた後にサウンドアクションを設定
# pdf.AfterOpenAction = soundAction

# ドキュメントを保存
pdf.SaveToFile("output/AddMusicPDF.pdf")
pdf.Close()

結果ドキュメントのプレビューはこちらです。

PythonでPDFにサウンドアクションを追加

こちらもおすすめ:PythonでPDF内の画像を挿入、置換、または削除する方法

Python で PDF にファイルオープンアクションを作成する

PdfLaunchAction クラスは PDF のファイルオープンアクションを表し、ユーザーが PDF ページ上のボタンをクリックすることで対応するファイルを開くことができます。開発者はファイルを開くための絶対パスまたは相対パス、および新しいウィンドウで開くかどうかを指定できます。PDF ドキュメントでファイルオープンアクションを作成する詳細手順は以下の通りです:

  1. PdfDocument クラスのオブジェクトを作成し、PdfDocument.LoadFromFile() メソッドで PDF ドキュメントを読み込みます。
  2. PdfDocument.Pages.get_Item() メソッドでドキュメントのページを取得します。
  3. PdfPageBase.Canvas.DrawRectangle() メソッドを使ってページ上に矩形を描画します。
  4. PdfLaunchAction クラスのオブジェクトを作成し、ファイルパスとパスタイプを指定します。
  5. PdfLaunchAction.IsNewWindow プロパティで新しいウィンドウで開くモードを設定します。
  6. アクションに基づいて PdfActionAnnotation オブジェクトを作成し、PdfActionAnnotation.Color プロパティで色を設定します。
  7. PdfPageBase.Annotations.Add() メソッドでページに注釈を追加します。
  8. PdfDocument.SaveToFile() メソッドでドキュメントを保存します。
from spire.pdf import *

# PdfDocument クラスのインスタンスを作成
pdf = PdfDocument()

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

# ドキュメントの最初のページを取得
page = pdf.Pages.get_Item(0)

# ページに矩形を描画
rect = RectangleF.FromLTRB(50, pdf.PageSettings.Size.Height - 100, 200, pdf.PageSettings.Size.Height - 80)
page.Canvas.DrawRectangle(PdfPens.get_LightGray(), rect)

# 矩形内にテキストを描画
page.Canvas.DrawString("Sample2 を開くにはクリック", PdfTrueTypeFont("Yu Gothic UI", 12.0, PdfFontStyle.Regular, True), PdfBrushes.get_Green(), rect, PdfStringFormat(PdfTextAlignment.Center))

# PdfLaunchAction オブジェクトを作成
action = PdfLaunchAction("Sample2.pdf", PdfFilePathType.Relative)
action.IsNewWindow = True

# アクションに基づいて PdfActionAnnotation オブジェクトを作成
annotation = PdfActionAnnotation(rect, action)
annotation.Color = PdfRGBColor(Color.get_Blue())

# 注釈をページに追加
page.Annotations.Add(annotation)

# ドキュメントを保存
pdf.SaveToFile("output/CreatePDFLaunchAction.pdf")
pdf.Close()

結果ドキュメントのプレビューはこちらです。

PythonでPDFにファイルオープンアクションを作成

一時ライセンスの申請

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

PythonでPDFから表を抽出するチュートリアル

PythonでPDFから表を抽出するには、通常、行と列で構成された視覚的レイアウトを理解する必要があります。多くのPDF表はセル境界を使用して定義されており、プログラム的に検出しやすくなっています。そのような場合、単にテキストを読み取るのではなく、レイアウト情報を解析できるライブラリを使うことが、正確なPDF表の抽出には不可欠です。

このチュートリアルでは、OCRや機械学習を使用せずにPythonでPDFから表を抽出する信頼性の高い方法を解説します。PDFに格子状の表がある場合でも複雑なレイアウトでも、表データをExcelやpandas DataFrameなどの構造化形式に変換する手順を学べます。

目次

PythonでPDFから表を抽出する準備

ExcelやCSVファイルとは異なり、PDFは表を構造化データとして保持していません。PythonでPDFから表を抽出するには、レイアウトを解析して表構造を検出できるライブラリが必要です。

Spire.PDF for Pythonは、ページごとに表を抽出するための組み込みメソッドを提供しており、明確にフォーマットされた表との相性が良く、PDFの内容をExcelやCSVなどの扱いやすいデータ形式に変換できます。

ライブラリのインストール方法:

pip install Spire.PDF

小規模なPDF表抽出には無料版も利用可能です:

pip install spire.pdf.free

PDFから表を抽出する手順

PythonでPDFから表を抽出するには、まず文書を読み込み、各ページを個別に解析します。Spire.PDF for Pythonを使えば、レイアウト構造に基づいて表を検出し、プログラムで抽出できます。複数ページのPDFにも対応可能です。

PDFを読み込み表を抽出する

以下は、PythonでPDFから表を読み取る基本例です。Spire.PDFを使い、文書の各ページから表を抽出します。プログラムで表データを扱いたい開発者に最適です。

from spire.pdf import PdfDocument, PdfTableExtractor

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

# PdfTableExtractorオブジェクトを作成
table_extractor = PdfTableExtractor(pdf)

# 各ページの表を抽出
for i in range(pdf.Pages.Count):
    tables = table_extractor.ExtractTable(i)
    for table_index, table in enumerate(tables):
        print(f"Page {i + 1} の Table {table_index + 1}:")
        for row in range(table.GetRowCount()):
            row_data = []
            for col in range(table.GetColumnCount()):
                text = table.GetText(row, col).replace("\n", " ")
                row_data.append(text.strip())
            print("\t".join(row_data))

この方法は、境界線のある表に対して信頼性があります。ただし、境界線のない表や複数行セル、未マークのヘッダーを含む表では、抽出が正確に行えない場合があります。

抽出結果の例:

PythonとSpire.PDFでPDF表を抽出した結果

表をExcelやCSVにエクスポート

抽出したPDF表を分析や保存したい場合、PythonでExcelやCSVに変換できます。この例ではSpire.XLS for Pythonを使い、各表をスプレッドシートに出力します。

pipでのインストール:

pip install spire.xls

PDF表をExcel/CSVに出力するコード例

from spire.pdf import PdfDocument, PdfTableExtractor
from spire.xls import Workbook, FileFormat

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

# 抽出器とExcelワークブックを設定
extractor = PdfTableExtractor(pdf)
workbook = Workbook()
workbook.Worksheets.Clear()

# ページごとに表を抽出
for page_index in range(pdf.Pages.Count):
    tables = extractor.ExtractTable(page_index)
    for t_index, table in enumerate(tables):
        sheet = workbook.Worksheets.Add(f"Page{page_index+1}_Table{t_index+1}")
        for row in range(table.GetRowCount()):
            for col in range(table.GetColumnCount()):
                text = table.GetText(row, col).replace("\n", " ").strip()
                sheet.Range.get_Item(row + 1, col + 1).Value = text
                sheet.AutoFitColumn(col + 1)

# すべての表を1つのExcelファイルに保存
workbook.SaveToFile("output/Sample.xlsx", FileFormat.Version2016)

下記のように、抽出したPDFの表はSpire.XLS for Pythonを使用してExcelやCSVに変換されます。

PythonでPDF表をExcelに変換した結果

PDF表抽出精度向上のヒント

複雑なレイアウトや改ページ、フォーマットの不一致により、PDFからの表抽出は完全でない場合があります。Pythonでより正確な結果を得るための実用的な方法を紹介します。

1. 複数ページにまたがる表の結合

Spire.PDFはページ単位で表を抽出します。表が複数ページにまたがる場合、行を結合して対応できます。

# 表を抽出して結合
combined_rows = []
for i in range(start_page, end_page + 1):
    tables = table_extractor.ExtractTable(i)
    if tables:
        table = tables[0]  # ページごとに1つの表を想定
        for row in range(table.GetRowCount()):
            cells = [table.GetText(row, col).strip().replace("\n", " ") for col in range(table.GetColumnCount())]
            combined_rows.append(cells)

結合後、ExcelやCSVに変換して分析できます。

2. 空行・無効行の除外

表には空行や空列が含まれることがあります。抽出前にフィルタリングすると精度が向上します。

# 空行を除外
filtered_rows = []
for row in range(table.GetRowCount()):
    row_data = [table.GetText(row, col).strip().replace("\n", " ") for col in range(table.GetColumnCount())]
    if any(cell for cell in row_data):
        filtered_rows.append(row_data)

# 空列を除外
transposed = list(zip(*filtered_rows))
filtered_columns = [col for col in transposed if any(cell.strip() for cell in col)]
filtered_data = list(zip(*filtered_columns))

これにより、雑多なレイアウトでもより正確な表抽出が可能です。

よくある質問 (FAQ)

Q: PDFからテキストと表の両方を抽出できますか?

はい、PdfTextExtractorでページ全体のテキストを取得し、PdfTableExtractorで構造化された表を抽出できます。

Q: 表が検出されません

PDFがテキストベース(スキャン画像ではない)であり、行列形式のレイアウトになっていることを確認してください。Spire.PDF for Pythonは境界線付き表のみを検出します。境界線のない表は認識されない場合があります。

画像ベースPDFの場合、Spire.OCR for Pythonを使用して表データを抽出できます。詳細は「Pythonで画像からテキストを抽出する方法」を参照してください。

Q: 境界線のない表を抽出するには?

Spire.PDFでは境界線のない表の抽出は難しい場合があります。以下の方法を検討してください:

  • PdfTextExtractorでテキストを抽出し、行列を特定するカスタムロジックを作成
  • 大規模言語モデルAPI(例: GPT)で抽出したテキストから構造を解析し、表データを取得
  • 元PDFに表の境界線を追加してから生成することで抽出しやすくする

Q: 抽出した表をpandas DataFrameに変換するには?

Spire.PDFには直接DataFrame出力はありませんが、セル値をリストのリストに格納してから変換可能です。

import pandas as pd
df = pd.DataFrame(table_data)

これにより、PythonでPDF表をDataFrameに変換して分析できます。

Q: Spire.PDF for Pythonは無料で使えますか?

はい、以下の2つのオプションがあります:

  • Free Spire.PDF for Python – 機能制限ありの永続無料版(ページ数制限など)。pipでインストール可能。公式ページ
  • 一時的無料ライセンス – 商用版の全機能を評価や社内利用で試せます。申請ページ

まとめ

構造化されたレポートや財務データ、標準フォームなど、PythonでPDF表を抽出すると作業効率が大幅に向上します。Spire.PDF for Pythonのようなレイアウト認識型パーサを使えば、OCRや手動調整なしで表を正確に検出・抽出可能です。Excel、CSV、DataFrameに変換すれば、自動化やデータ分析にすぐ活用できます。

総じて、Spire.PDFを使ったPythonによるPDF表抽出は、ExcelやCSVなどの構造化形式への変換を通じて、分析や自動処理に非常に便利です。

PythonでPDFから画像を抽出するチュートリアル

PDF ファイルには、グラフ、図、スキャン画像などの重要なビジュアル情報が含まれていることが多くあります。
開発者にとって、PythonでPDFから画像を抽出する方法を知っておくことは、レポートの自動生成や画像解析、OCR などの機械学習タスクにおいて非常に有用です。

この記事では、Spire.PDF for Python を利用して、Python で PDF から画像を抽出する方法を次の観点から詳しく紹介します。

インストールと環境設定

Python で Spire.PDF を使用して PDF から画像を抽出する前に、以下の準備を行ってください。

  • Python 環境:システムに Python がインストールされていることを確認します。
    最新の安定版を使用することで、より良い互換性とパフォーマンスが得られます。
    Python公式サイト からダウンロード可能です。

  • Spire.PDF for Python ライブラリ
    Python 用の PDF SDK をインストールします。pip を使うのが最も簡単です。

コマンドプロンプトまたはターミナルで以下を実行します:

pip install Spire.PDF

PythonでPDFから画像を抽出する方法

Spire.PDF をインストールしたら、すぐに PDF ドキュメントから画像を抽出できるようになります。 以下の例では、ページ単位および全ページから画像を抽出する方法を順に紹介します。

例1:PDFの特定ページから画像を抽出する

次のコードは、PDF の特定ページに含まれるすべての画像を抽出して保存する完全なスクリプトです。

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

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

# PDFファイルを読み込む
pdf.LoadFromFile("template1.pdf")

# 最初のページを取得
page = pdf.Pages[0]

# PdfImageHelper インスタンスを作成
imageHelper = PdfImageHelper()

# ページ上の画像情報を取得
imageInfo = imageHelper.GetImagesInfo(page)

# 取得した画像情報をループ処理して保存
for i in range(0, len(imageInfo)):
    imageInfo[i].Image.Save("Images/Image" + str(i) + ".png")

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

ポイント解説:

  • PDFを読み込むLoadFromFile() メソッドを使ってファイルをロードします。
  • ページを取得:インデックスを指定して特定ページを取得します。
  • 画像情報を抽出PdfImageHelper を使い、GetImagesInfo() メソッドでページ内の画像情報(PdfImageInfo オブジェクト)をリストとして取得します。
  • 画像を保存:ループ処理で各画像を順に保存します。

出力例プレビュー:

PythonでPDFページから画像を抽出する例


例2:PDF全体からすべての画像を抽出する

単一ページからの抽出を拡張し、すべてのページをループして全画像を抽出することも可能です。 以下のスクリプトでは、PDF 全体からすべての埋め込み画像を取得します。

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

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

# PDFファイルを読み込む
pdf.LoadFromFile("template1.pdf")

# PdfImageHelper インスタンスを作成
imageHelper = PdfImageHelper()

# すべてのページをループ
for i in range(0, pdf.Pages.Count):
    page = pdf.Pages[i]
    imageInfo = imageHelper.GetImagesInfo(page)
    for j in range(0, len(imageInfo)):
        imageInfo[j].Image.Save(f"Images\\Page{i + 1}_Image{j + 1}.png")

# PDFを閉じる
pdf.Close()

出力例プレビュー:

PythonでPDF全ページから画像を抽出する例

PDF内の画像をさらに操作したい場合は、PythonでPDFに画像を追加・置換・削除する方法の記事も参考にしてください。

抽出時に異なる画像形式を扱う方法

Spire.PDF for Python は、PNG、JPG/JPEG、BMP などさまざまな画像形式の抽出をサポートしています。 抽出した画像を保存する際、用途に合わせて最適なフォーマットを選択することができます。

主な画像形式と特徴:

形式 主な用途 備考
JPG/JPEG 写真・スキャン画像 圧縮で若干の劣化あり。PDFで最も一般的。
PNG 図表・スクリーンショット 透過保持。ファイルサイズはやや大きめ。
BMP 一時保存やWindowsアプリ用 現在のPDFではまれ。Web用途には不向き。
TIFF 保存・印刷・OCR入力 アーカイブや文書保存向け。複数ページ対応。
EMF ベクター画像編集 IllustratorやInkscapeで編集可能。

よくある質問(FAQ)

Q1:Spire.PDF for Python は無料ですか?

Spire.PDF for Python には無料版と商用版があります。 Free Spire.PDF for Python は、1ファイルあたり最大10ページなどの制限があります。 制限のない試用版ライセンスを希望する場合は、こちらから申請してください。

Q2:特定のページ範囲だけから画像を抽出できますか?

可能です。全ページをループする代わりに、抽出したいページのインデックスを指定します。 例えば 2~5 ページの画像を抽出するには次のように書きます。

# ページ2~5の画像を抽出(ページは0始まり)
for i in range(1, 4):
    page = pdf.Pages[i]
    # 上記と同じ処理を実行

Q3:抽出した画像からテキストを取り出すことはできますか?

はい。スキャンPDFのように画像内に文字が含まれている場合は、Spire.OCR for Python を組み合わせることで、抽出画像から文字認識を行うことができます。

まとめ

PythonでPDFから画像を抽出する作業は、Spire.PDF for Python を使うことで簡単かつ効率的に実現できます。 この記事で紹介したサンプルコードを活用すれば、特定ページや全ページから画像を抽出し、任意の形式で保存することが可能です。 さらに、OCRツールと組み合わせることで、画像からテキストを自動的に抽出することもできます。

この機能を活用すれば、レポート作成や画像解析などの業務効率を大幅に向上させ、PDFに埋め込まれたビジュアルデータを柔軟に再利用できます。

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 ソリューションです。

SVG ファイルは、拡大縮小や調整が容易であることから、Web グラフィックスやベクター形式のイラストによく利用されます。一方 PDF は、さまざまなデバイスや OS で幅広くサポートされている汎用性の高い形式です。SVG を PDF に変換することで、受け取る側が特別なソフトウェアを用意したり、ブラウザの互換性を気にする必要なく、グラフィックスやイラストを簡単に共有できます。本記事では、Python で SVG ファイルを PDF 形式に変換する方法Spire.PDF for Python を用いて解説します。

目次

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

この操作には Spire.PDF for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。

pip install Spire.PDF

Python で SVG を PDF に変換する

Spire.PDF for Python では、PdfDocument.LoadFromSvg() メソッドを使用して SVG ファイルを読み込み、PdfDocument.SaveToFile() メソッドで PDF として保存できます。手順は以下の通りです。

  • PdfDocument クラスのオブジェクトを作成する
  • PdfDocument.LoadFromSvg() メソッドで SVG ファイルを読み込む
  • PdfDocument.SaveToFile() メソッドで PDF ファイルとして保存する
from spire.pdf import PdfDocument, FileFormat

# PdfDocument オブジェクトを作成
doc = PdfDocument()
# SVG ファイルを読み込む
doc.LoadFromSvg("Sample.svg")

# SVG を PDF 形式に保存
doc.SaveToFile("output/ConvertSvgToPdf.pdf", FileFormat.PDF)
# PdfDocument オブジェクトを閉じる
doc.Close()

PythonでSVGをPDFに変換する

Python で SVG を PDF に追加する

Spire.PDF for Python では、SVG を PDF に直接変換するだけでなく、既存の PDF に任意の位置へ追加することも可能です。手順は以下の通りです。

  • PdfDocument クラスのオブジェクトを作成し、PdfDocument.LoadFromSvg() で SVG ファイルを読み込む
  • 読み込んだ SVG の内容を基に Pages[].CreateTemplate() メソッドでテンプレートを作成する
  • テンプレートの幅と高さを取得する
  • 別の PdfDocument オブジェクトを作成し、PdfDocument.LoadFromFile() で PDF ファイルを読み込む
  • Pages[].Canvas.DrawTemplate() メソッドで、テンプレートを任意のサイズで指定位置に描画する
  • PdfDocument.SaveToFile() メソッドで保存する
from spire.pdf import PdfDocument, PointF, FileFormat

# PdfDocument オブジェクトを作成
doc1 = PdfDocument()
# SVG ファイルを読み込む
doc1.LoadFromSvg("Sample.svg")

# SVG 内容を基にテンプレートを作成
template = doc1.Pages.get_Item(0).CreateTemplate()

# 別の PdfDocument オブジェクトを作成
doc2 = PdfDocument()
page = doc2.Pages.Add()

# 読み込んだ PDF の 1 ページ目に、テンプレートを指定位置に描画
page.Canvas.DrawTemplate(template, PointF(10.0, 100.0))

# 結果を保存
doc2.SaveToFile("output/AddSvgToPdf.pdf", FileFormat.PDF)
# PdfDocument オブジェクトを閉じる
doc2.Close()
doc1.Close()

PythonでSVGをPDFに追加する

もし PDF に他の種類の画像を挿入したい場合は、Python で PDF に画像を追加・削除・置換する方法をご参照ください。

一時ライセンスの申請

生成した文書から評価用の透かしを削除したい場合や、機能制限を解除したい場合は、30 日間有効の試用ライセンスを申請してください。

Pythonを使用してExcelセルに異なる数値書式を設定する方法のチュートリアル

Excel ワークシートのセルに数値書式を設定することは、データ管理や可視化において欠かせない作業です。適切な数値書式を設定することで、データの可読性が向上し、一貫性が保たれ、正確なデータ分析を行いやすくなります。通貨、パーセンテージ、日付、科学的記数法など異なる種類の数値データを直感的に区別できるため、大量のデータを一目で理解しやすくなります。この記事では、Python プログラムで Spire.XLS for Python を使用して Excel ワークシートのセルに数値書式を自動設定する方法 を解説します。

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

この操作には、Spire.XLS for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。

pip install Spire.XLS

Excel ワークシートでセルの数値書式を設定する

Excel では、セルの数値書式は「書式コード」によって決まります。開発者は書式コードの中でさまざまな記号を利用して、数値、日付や時刻、通貨などの表示形式を定義できます。以下は代表的な記号です:

  • #:桁のプレースホルダー。ゼロ以外の数値のみを表示します。
  • 0:桁のプレースホルダー。ゼロでも必ず桁を確保します。
  • ;(セミコロン):正の数、負の数、ゼロの書式を区切ります。
  • /(スラッシュ):日付の書式で年・月・日を区切ります。
  • ¥ / $:通貨記号。システムの地域設定に応じて変化します。
  • ()(かっこ):負の数をかっこ付きで表示します。
  • [ ](角かっこ):条件付き書式に利用。例:[Red] で赤表示、[<=100]"低" ; [>100]"高" など。

Spire.XLS for Python では、セルに数値を設定するために CellRange.NumberValue プロパティを、数値書式を設定するために CellRange.NumberFormat プロパティを使用します。

Python で Excel セルに数値書式を設定する手順

  • Workbook クラスのインスタンスを生成して Excel ブックを作成する
  • Workbook.Worksheets[] を使用して最初のシートを取得する
  • Worksheet.Range[].Text プロパティでヘッダー行を設定する
  • Worksheet.Range[].NumberValue プロパティでセルに数値を入力し、Worksheet.Range[].NumberFormat プロパティで書式コードを指定する
  • Workbook.SaveToFile() メソッドで Excel ファイルを保存する

Python コード例

以下のコード例では、数値、パーセンテージ、通貨、日付、時刻、科学的記数法など、さまざまな数値書式をセルに適用する方法を示します。

from spire.xls import *
from spire.xls.common import *

# Workbook を作成
workbook = Workbook()

# 最初のワークシートを取得
sheet = workbook.Worksheets.get_Item(0)

# ヘッダー行を設定
sheet.Range["B9"].Text = "数値書式"
sheet.Range["C9"].Text = "値"
sheet.Range["D9"].Text = "表示"

# 桁区切りと小数点付きの数値
sheet.Range["B10"].Text = "桁区切りと小数点付きの数値"
sheet.Range["C10"].Text = "-1234.5678"
sheet.Range["D10"].NumberValue = -1234.5678
sheet.Range["D10"].NumberFormat = "#,##0.00"

# 赤色で表示される数値
sheet.Range["B11"].Text = "赤色で表示される数値"
sheet.Range["C11"].Text = "12345.12345"
sheet.Range["D11"].NumberValue = 12345.12345
sheet.Range["D11"].NumberFormat = "[Red]#,##0.00"

# 小数点以下2桁のパーセンテージ
sheet.Range["B12"].Text = "小数点以下2桁のパーセンテージ"
sheet.Range["C12"].Text = "0.12345"
sheet.Range["D12"].NumberValue = 0.12345
sheet.Range["D12"].NumberFormat = "0.00%"

# かっこ付きの数値
sheet.Range["B13"].Text = "かっこ付きの数値"
sheet.Range["C13"].Text = "-1234.5678"
sheet.Range["D13"].NumberValue = -1234.5678
sheet.Range["D13"].NumberFormat = "(#,##0.00;(#,##0.00))"

# 日付
sheet.Range["B14"].Text = "日付"
sheet.Range["C14"].Text = "36526"
sheet.Range["D14"].NumberValue = 36526
sheet.Range["D14"].NumberFormat = "yyyy/m/d"

# 時刻
sheet.Range["B15"].Text = "時刻"
sheet.Range["C15"].Text = "0.5"
sheet.Range["D15"].NumberValue = 0.5
sheet.Range["D15"].NumberFormat = "h:mm:ss AM/PM"

# 日本円形式の通貨
sheet.Range["B16"].Text = "日本円形式の通貨"
sheet.Range["C16"].Text = "1234.56"
sheet.Range["D16"].NumberValue = 1234.56
sheet.Range["D16"].NumberFormat = "¥#,##0.00"

# 科学的記数法
sheet.Range["B18"].Text = "科学的記数法"
sheet.Range["C18"].Text = "1234.5678"
sheet.Range["D18"].NumberValue = 1234.5678
sheet.Range["D18"].NumberFormat = "0.00E+00"

# 日付と時刻
sheet.Range["B19"].Text = "日付と時刻"
sheet.Range["C19"].Text = "36526"
sheet.Range["D19"].NumberValue = 36526
sheet.Range["D19"].NumberFormat = "yyyy/m/d h:mm:ss AM/PM"

# テキスト付きの数値
sheet.Range["B20"].Text = "テキスト付きの数値"
sheet.Range["C20"].Text = "1234.56"
sheet.Range["D20"].NumberValue = 1234.5678
sheet.Range["D20"].NumberFormat = "\"円 \"#,##0.00"

# フォントサイズを設定し、行と列を自動調整
sheet.AllocatedRange.Style.Font.Size = 13
sheet.AllocatedRange.AutoFitRows()
sheet.AllocatedRange.AutoFitColumns()

# ファイルを保存
workbook.SaveToFile("output/SetNumberFormatExcel.xlsx", FileFormat.Version2016)
workbook.Dispose()

適切な数値書式を設定することは、値を直感的に理解できるように表示するための基盤であり、プロフェッショナルな Excel レポートを作成する第一歩です。

生成された Excel ファイルのプレビュー:

Python コードで数値書式を設定した Excel ワークシート

数値書式は、Excel セル内の数値表示を制御します。Excel レポートをより見やすく、プロフェッショナルなものに仕上げるには、数値だけでなく書式設定にもしっかり取り組むことが重要です。さらに詳しい書式設定の方法については、「Python で Excel の書式を設定する方法」をご参照ください。

まとめ

Excel セルに数値書式を設定することで、データはより直感的でわかりやすく表示され、ビジネスレポートの品質も大きく向上します。Python と Spire.XLS を活用すれば、手作業では時間のかかる書式設定も自動化でき、効率的かつ一貫性のあるレポート作成が可能になります。

数値の見せ方は単なる装飾ではなく、データを正しく伝えるための重要な要素です。ぜひ今回紹介した方法を活用し、よりプロフェッショナルな Excel レポートを作成してみてください。なお、すべての機能を利用する場合は 無料の一時ライセンスを申請する か、まずは 無料版をダウンロードする ことをおすすめします。

Python コードで Excel ワークシートにデータを書き込む方法のチュートリアル

Excel は、データの整理・分析・可視化において最も広く利用されているツールのひとつです。財務報告書から業務ダッシュボードに至るまで、多くのワークフローで Excel へのデータ出力が必要とされます。手動で情報を入力する代わりに、Python で Excel ファイルを書き込む処理を自動化すれば、処理がより迅速で、信頼性が高く、スケーラブルになります。

本チュートリアルでは、Python を使って Excel ファイルにデータを書き込む方法を解説します。構造化データの挿入、書式設定、エクスポートまでをカバーしており、例ではプログラムからワークブックを生成・カスタマイズできる Python の Excel ライブラリを使用しています。

本チュートリアルの内容:

環境のセットアップ

Python で Excel ファイルを書き込むには、ワークブックの作成・読み込み・保存をプログラム的に行えるライブラリが必要です。Spire.XLS for Python はこれらの操作に対応した完全な API を提供し、レポート作成やデータ処理を自動化できます。

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

pip install spire.xls

インストール後は、次の 3 つの基本操作が可能になります:

  • 新しいワークブックを作成Workbook() で新規 Excel ドキュメントを初期化。
  • 既存のワークブックを読み込みLoadFromFile() で既存の Excel ファイルを開く。
  • ワークブックを保存SaveToFile() でワークブックを .xlsx、.xls、CSV など任意の形式にエクスポート。

これらの操作が、Python におけるデータ書き込み、書式設定、複数シート管理の基礎となります。

Python で Excel ファイルにデータを書き込む

実際のビジネスシーンでは、新しい Excel ファイルの作成、既存レポートの更新、テキスト・数値・日付・数式などさまざまな種類のデータ書き込みが必要です。このセクションでは、これらのケースにおける効率的な Python での Excel データ操作を紹介します。

既存の Excel ファイルにデータを追加する

最新の売上データや在庫情報などを既存の Excel ワークブックに追記したい場合、ファイルを開いてプログラムで新しいデータ行を追加し、既存の内容を保持したまま保存できます。

from spire.xls import Workbook, ExcelVersion

workbook = Workbook()
workbook.LoadFromFile("Sample.xlsx")
sheet = workbook.Worksheets[0]

# 新しい行を追加
sheet.Range["A4"].Value = "ノートパソコン"
sheet.Range["B4"].NumberValue = 5
sheet.Range["C4"].NumberValue = 120000

sheet.Range["A5"].Value = "モニター"
sheet.Range["B5"].NumberValue = 10
sheet.Range["C5"].NumberValue = 30000

workbook.SaveToFile("output/updated_excel.xlsx", ExcelVersion.Version2016)

ポイントとなる要素:

  • LoadFromFile() – 既存の Excel ファイルをワークブックに読み込む。
  • Range["セル名"] – シート内の特定セルを参照。
  • Value / NumberValue – セルにテキストや数値を代入。
  • SaveToFile() – 指定形式でファイルを保存。

この方法により、既存のレポートを保持したまま継続的にデータを更新できます。

Python で既存の Excel ファイルに行を追加する例

新しい Excel ファイルに複数行・列を書き込む

大規模なデータセットを扱う場合、セル単位で更新するよりも複数行・列を一括で書き込む方が効率的です。この方法は処理速度の向上だけでなく、ワークシート全体のデータ整合性を確保できます。

from spire.xls import Workbook, ExcelVersion

# 新しい Excel ワークブックを作成
workbook = Workbook()
sheet = workbook.Worksheets[0]

orders = [
    ["注文ID", "顧客名", "商品名", "数量", "単価", "ステータス"],
    [1001, "佐藤", "ノートパソコン", 2, 120000, "発送済み"],
    [1002, "鈴木", "モニター", 1, 30000, "保留中"],
    [1003, "高橋", "キーボード", 5, 4500, "配達済み"],
    [1004, "田中", "マウス", 3, 2500, "発送済み"],
    [1005, "伊藤", "タブレット", 1, 45000, "保留中"]
]

for row_index, row_data in enumerate(orders, start=1):
    for col_index, value in enumerate(row_data, start=1):
        if isinstance(value, (int, float)):
            sheet.Range[row_index, col_index].NumberValue = value
        else:
            sheet.Range[row_index, col_index].Value = value

workbook.SaveToFile("output/orders.xlsx", ExcelVersion.Version2016)

注目すべき要素:

  • enumerate() – ループ処理で行番号・列番号を取得。
  • Range[row, col] – 行・列インデックスでセルを参照。

バッチ書き込みは、データベースのクエリ結果や業務レポートのエクスポートに特に有効です。

Python で複数行・列を一括で Excel に書き込む例

複数のデータ型を書き込む

Excel のセルは、テキスト・数値・日付・数式など多様なデータ型を扱えます。正しいプロパティを使うことで、各データ型が適切に保存・表示され、計算や書式設定が正確に行われます。

from spire.xls import Workbook, ExcelVersion, DateTime, TimeSpan

workbook = Workbook()
sheet = workbook.Worksheets[0]

# 一般的な値
sheet.Range[2, 2].Text = "一般的な例"
sheet.Range[2, 3].Value = "サンプル123"

# 数値
sheet.Range[3, 2].Text = "数値の例"
sheet.Range[3, 3].NumberValue = 1234.56
sheet.Range[3, 3].NumberFormat = "0.000"

# 日付
sheet.Range[4, 2].Text = "日付の例"
sheet.Range[4, 3].DateTimeValue = DateTime.get_UtcNow()

# 数式
sheet.Range[5, 2].Text = "数式の例"
sheet.Range[5, 5].NumberValue = 1234.56
sheet.Range[5, 6].NumberValue = 6543.21
sheet.Range[5, 3].Formula = "=SUM(E5:F5)"

# テキスト
sheet.Range[6, 2].Text = "文字列の例"
sheet.Range[6, 3].Text = "テキスト"

# 真偽値
sheet.Range[7, 2].Text = "真偽値の例"
sheet.Range[7, 3].BooleanValue = True

sheet.AllocatedRange.Style.Font.FontName = "Yu Gothic UI"
sheet.AllocatedRange.AutoFitColumns()

workbook.SaveToFile("output/value_types.xlsx", ExcelVersion.Version2016)

主な関数・プロパティ:

  • Value – 一般的な値を設定または取得。テキストや混在データ向け。
  • NumberValue – 数値を設定・取得し、計算や数値書式を正確に扱う。
  • DateTimeValue – 日付や時刻を設定・取得。正しいフォーマットで表示。
  • Formula – 数式を設定または取得し、動的な計算を可能にする。
  • BooleanValue – True/False のブール値を設定。
  • Text – 書式適用後の表示テキストを取得。

異なるデータ型を正しく扱うことは、ビジネス計算やレポートの精度を維持するために不可欠です。対応するデータ型の詳細は XlsRange API リファレンス を参照してください。

Python でテキスト・数値・日付・数式を Excel に書き込む例

Python で Excel データを書き込みながら書式設定する

Excel レポートをわかりやすく、プロフェッショナルに仕上げるには、データ入力や更新と同時に書式を適用することが重要です。このセクションでは、セルのスタイル、数値フォーマット、列幅・行高の調整方法を解説します。

セルスタイルの適用

フォント・罫線・背景色などのスタイルを適用することで、シートの可読性と視覚的な訴求力を高められます。

from spire.xls import Workbook, Color, FontUnderlineType, ExcelVersion, BordersLineType, LineStyleType

workbook = Workbook()
sheet = workbook.Worksheets[0]

# 見出し
sheet.Range["A1"].Value = "商品"
sheet.Range["B1"].Value = "カテゴリ"
sheet.Range["C1"].Value = "価格"
sheet.Range["D1"].Value = "数量"
sheet.Range["E1"].Value = "合計"

# データ行
sheet.Range["A2"].Value = "ノートパソコン"
sheet.Range["B2"].Value = "パソコン"
sheet.Range["C2"].NumberValue = 150000
sheet.Range["D2"].NumberValue = 1
sheet.Range["E2"].Formula = "=C2*D2"

sheet.Range["A3"].Value = "スマートフォン"
sheet.Range["B3"].Value = "モバイル"
sheet.Range["C3"].NumberValue = 90000
sheet.Range["D3"].NumberValue = 2
sheet.Range["E3"].Formula = "=C3*D3"

# ヘッダーのスタイル
header = sheet.Range["A1:E1"]
header.Style.Font.FontName = "Yu Gothic UI"
header.Style.Font.Size = 12.0
header.Style.Font.IsBold = True
header.Style.Font.Underline = FontUnderlineType.Single
header.Style.Interior.Color = Color.get_LightGray()
header.Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Medium

主な構成要素:

  • Style.Font – フォント関連の設定(太字、下線など)。詳細は Style.Font API ドキュメント を参照。
  • FontUnderlineType.Single – 一重下線を適用。
  • Interior.Color – 背景色を設定。
  • Borders.LineStyle – セルに罫線を追加。

スタイルを使うことで、重要な部分を強調し、レポート全体の見栄えを向上させられます。

Excel セルの数値フォーマットを設定

数値はフォーマットを適切に指定することで、通貨・パーセンテージ・整数など読みやすい形で表示できます。CellRange.NumberFormat を利用して、値の見せ方を制御します。

# 数値のフォーマット(円表示)
sheet.Range["C2:C3"].NumberFormat = "¥#,##0"   # 通貨
sheet.Range["D2:D3"].NumberFormat = "0"        # 整数
sheet.Range["E2:E3"].NumberFormat = "¥#,##0"

ポイント:

  • NumberFormat – 表示形式を設定・取得。データはそのまま保持しつつ見た目だけを変えることが可能。
  • フォーマットコードで通貨記号、小数点、桁区切り、割合表示などを柔軟に設定可能。

適切な数値フォーマットにより、財務データが理解しやすく、よりプロフェッショナルに見えます。詳細は Python で Excel セルの数値フォーマットを設定する方法 を参照してください。

列幅と行高の調整

列幅や行高を適切に設定することで、内容を見やすく表示できます。自動調整や固定値の指定が可能です。

# 列幅と行の高さを自動調整
for col in range(1, 5):
    sheet.AutoFitColumn(col)
for row in range(1, 3):
    sheet.AutoFitRow(row)
#sheet.Range["A1:E3"].AutoFitColumns()
#sheet.Range["A1:E3"].AutoFitRows()

# 固定の列幅と行の高さを設定
sheet.Columns[1].Width = 150
sheet.Rows[1].Height = 30

workbook.SaveToFile("output/formatted_excel.xlsx", ExcelVersion.Version2016)

ポイント:

  • AutoFitColumn(colIndex) / AutoFitRow(rowIndex) – 指定列や行を自動調整。
  • CellRange.AutoFitColumns() / AutoFitRows() – 指定範囲の列や行を一括調整。
  • Columns[colIndex].Width / Rows[rowIndex].Height – 固定値を設定してレイアウトを統一。

動的データには自動調整、定型レイアウトには固定値を用いることで、見やすさと一貫性を両立できます。

Python でスタイルと自動調整を適用した Excel ヘッダー例

より高度な Excel 書式設定(フォント・色・罫線・条件付き書式など)については、Python で Excel を書式設定する方法 を参照してください。

Python で複数のワークシートを管理する

Excel では、複数のワークシートを使うことで関連情報を分離し、管理しやすくできます。たとえば、売上・仕入・在庫を同じワークブック内の別シートに整理できます。このセクションでは、Python で 複数シートを作成・参照・管理する方法を紹介します。

from spire.xls import Workbook, ExcelVersion

workbook = Workbook()
# 新しく作成されたワークブックには、
# デフォルトのワークシートが3つ含まれています

# ワークシート名を日本語に設定
sheet = workbook.Worksheets[0]
sheet.Name = "売上データ"

sheet1 = workbook.Worksheets["Sheet2"]
sheet1.Name = "仕入データ"

sheet2 = workbook.Worksheets.Add("在庫データ")
sheet2.Range["A1"].Value = "商品ID"
sheet2.Range["B1"].Value = "在庫数"
sheet2.Range["A2"].Value = "P001"
sheet2.Range["B2"].NumberValue = 100
sheet2.Range["A3"].Value = "P002"
sheet2.Range["B3"].NumberValue = 50

workbook.Worksheets.RemoveAt(2)

workbook.SaveToFile("output/multi_sheet.xlsx", ExcelVersion.Version2016)

主な操作:

  • Worksheets[Index] – インデックスでシートにアクセス。反復処理や先頭・末尾シート参照に便利。
  • Worksheets["シート名"] – 名前でシートにアクセス。順序変更の影響を受けにくく可読性が高い。
  • Worksheets.Add("シート名") – 新しいシートを作成し、部門・地域・カテゴリごとにデータを整理可能。

これにより、Excel ファイルを論理的に構成し、関連データを分離して明確かつ管理しやすくできます。

Python で複数の Excel ワークシートを作成・管理する例

Python で Excel ファイルを書き込む際のベストプラクティス

効率性・一貫性・使いやすさを確保するため、以下のベストプラクティスに従うことを推奨します:

  • 「Sheet1」ではなく「Sales_2024」のような 意味のあるシート名を使用する。
  • 大量データはバッチ処理で書き込み、セル単位更新は避ける。
  • 見出しや合計列などに 一貫した書式設定を適用する。
  • Excel の数式を活用して動的計算を維持する。
  • データ型を検証し、グラフや数式での誤解釈を防ぐ。
  • 対象に適したファイル形式を選択:最新環境では .xlsx、互換性が必要な場合のみ .xls。
  • シートを論理的に整理し、関連データをグルーピングする。

これらを実践することで、再利用可能でプロフェッショナルなレポートを効率的に作成できます。

まとめ

Python で Excel 書き込みを自動化すれば、レポート作成が大幅に効率化されます。ワークブック作成、データの効率的な書き込み、スタイル適用、シート管理、多様なデータ型の処理を組み合わせることで、一貫性・正確性・プロフェッショナル性を備えた Excel レポートが実現できます。さらに詳しく試すには、無料の一時ライセンスを申請するか、Free Spire.XLS for Python を利用できます。

Python での Excel 書き込み FAQ

Q1: Python で既存の Excel ファイルに書き込めますか?

はい、既存のワークブックを読み込み、データを追加・修正した上で保存できます。既存の内容は保持されます。

Q2: 大規模データを効率的に処理する方法は?

複数行のバッチ書き込みと、書式設定を最小限に抑えた挿入で、数千行規模でも高いパフォーマンスを維持できます。

Q3: 数式を Excel ファイルに含められますか?

はい、=SUM() などの基本数式から複雑な計算式まで挿入でき、レポートを動的に更新できます。

Q4: 対応している Excel 形式は?

Spire.XLS for Python は .xlsx、.xls、CSV、さらに PDF へのエクスポートにも対応しており、一般的な利用シナリオと互換性要件をカバーします。