PDFドキュメントはレイアウトが固定されているため、レポートや契約書など改ざんできない形式の出力に最適です。しかし、このようなPDFに後からテキストを挿入・修正するのは通常の方法では容易ではありません。Pythonを活用することで、PDFへのテキスト追加を効率化し、ドキュメント生成から内容確認までのプロセスを自動化できます。
この記事では、技術的な観点からPDFにテキストを追加する3つの方法を詳しく解説します。
- ✅ 新規PDFを作成して段落テキストを追加する
- ✅ 既存のPDFに短いコメントや注釈を挿入する
- ✅ テキストの書式、配置、レイアウト領域を自由にカスタマイズする
ここで紹介する方法では、無料で利用できる Free Spire.PDF for Python を使用します。pipでインストール可能です。
pip install spire.pdf.free
新規PDFを作成して段落テキストを追加する
システムレポートを作成したり、テンプレート文書を生成する際には、空白のページに複数の段落を挿入し、レイアウトを統一することがよくあります。
from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, RectangleF, \
PdfStringFormat, PdfTextAlignment, PdfVerticalAlignment
# 新しいPDFドキュメントを作成し、ページを追加
pdf = PdfDocument()
page = pdf.Pages.Add()
# 挿入するテキスト内容
text = ("The purpose of this document is to provide an overview of the company’s financial highlights for the fiscal year 2024. "
"It includes revenue trends, operational costs, and net income summaries. "
"The following sections will outline each metric in more detail.")
# フォント、ブラシ(色)、レイアウト領域を設定
font = PdfTrueTypeFont("Arial", 14.0, PdfFontStyle.Regular, True)
brush = PdfSolidBrush(PdfRGBColor(0, 0, 0)) # 黒色テキスト
layout_area = RectangleF(50.0, 50.0, page.GetClientSize().Width - 100.0, page.GetClientSize().Height)
string_format = PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top)
# テキストを描画
page.Canvas.DrawString(text, font, brush, layout_area, string_format, False)
# 保存してクローズ
pdf.SaveToFile("output/new.pdf")
pdf.Close()
📌 技術ポイント:
-
PdfTrueTypeFont
は外部フォントファイルを埋め込むことができ、フォント互換性を確保できます。 -
RectangleF
でテキストの配置領域を定義し、段落枠を自由に設定可能。 -
DrawString()
は領域を超える場合に自動で折り返し表示をサポート。 -
PdfStringFormat
を使用して、水平方向・垂直方向の配置を細かく指定できます。
既存のPDFにテキストを挿入する
既にPDFが存在しており、その一部にコメントやメモ、承認スタンプなどを追加したい場合には、以下のように記述できます。
from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfFont, PdfFontFamily
# 既存のPDFドキュメントを読み込み
pdf = PdfDocument()
pdf.LoadFromFile("PDF.pdf")
page = pdf.Pages[0]
# フォント、色、挿入位置を設定
font = PdfFont(PdfFontFamily.TimesRoman, 12.0, PdfFontStyle.Bold)
brush = PdfSolidBrush(PdfRGBColor(0, 128, 0)) # ダークグリーン
location = PointF(130.0, 90.0)
# テキストを挿入
page.Canvas.DrawString("Verified by QA Department", font, brush, location)
# 保存
pdf.SaveToFile("output/ModifiedPDF.pdf")
pdf.Close()
📌 技術ポイント:
-
PdfFontFamily.TimesRoman
はPDFに標準で組み込まれているフォントのため、埋め込み不要です。 - 座標
PointF(x, y)
の単位はポイント(1pt ≈ 0.3528mm)、原点はページ左上。 - 領域指定なしで、短いラベルやスタンプに最適です。
複雑な書式設定:透明で斜めのテキストウォーターマークを追加
文書のレビュー用や内部版の配布では、透明度と回転角度を持つウォーターマークを付けて、機密性を示したり誤配布を防止することが一般的です。Spire.PDF では、キャンバス状態の保存、回転、透明度設定などの機能を使って、このような高度なフォーマットにも対応できます。
from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF
from spire.pdf.common import Color
# 既存のPDFを読み込み
pdf = PdfDocument()
pdf.LoadFromFile("input1.pdf")
page = pdf.Pages[0]
# ウォーターマークテキスト
text = "Internal Use Only"
# フォントスタイルとサイズ
font = PdfTrueTypeFont("Arial", 40.0, PdfFontStyle.Bold, True)
# ブラシカラー(ダークレッド)
brush = PdfSolidBrush(PdfRGBColor(Color.get_DarkRed()))
# テキストサイズを測定して中央配置
size = font.MeasureString(text)
x = (page.Canvas.ClientSize.Width - size.Width) / 2
y = (page.Canvas.ClientSize.Height - size.Height) / 2
# キャンバス状態を保存
state = page.Canvas.Save()
# 透明度を設定
page.Canvas.SetTransparency(0.3)
# 原点をテキスト中央に移動
page.Canvas.TranslateTransform(x + size.Width / 2, y + size.Height / 2)
# テキストを-45度回転
page.Canvas.RotateTransform(-45.0)
# ウォーターマークテキストを描画(中央基準)
page.Canvas.DrawString(text, font, brush, PointF(-size.Width / 2, -size.Height / 2))
# キャンバス状態を復元
page.Canvas.Restore(state)
# 保存
pdf.SaveToFile("output/with_watermark.pdf")
pdf.Close()
📌 技術ポイント:
-
SetTransparency(0.3)
を使用してテキストの透明度を設定し、本文を隠さずにウォーターマーク効果を出す。 -
TranslateTransform()
で原点をテキスト中央に移動。 -
RotateTransform(-45)
により、対角線方向に回転させるのが一般的。 -
DrawString()
でウォーターマークを描画し、PointF(-size.Width / 2, -size.Height / 2)
で中央基準に配置。 -
Canvas.Save()
とCanvas.Restore()
を活用し、他の要素に影響を与えずに局所的な描画設定を適用。
まとめ
Spire.PDF for Python を使えば、シンプルなPythonコードでPDFに多様なテキストを追加できます。主な機能は以下の通りです。
機能 | 方法・ポイント |
---|---|
✅ 新規ドキュメント作成 |
PdfDocument.Pages.Add() + DrawString()
|
✅ 既存ドキュメントに挿入 |
LoadFromFile() + PointF で挿入位置を指定 |
✅ レイアウト制御 |
RectangleF + PdfStringFormat で配置・領域調整 |
✅ 複数行テキスト対応 | テキスト内に \n を含めれば自動改行 |
✅ フォント・色設定 |
TrueType フォント、標準フォント、RGBカラーを自由設定 |
これら3つの方法を活用することで、PDFのテキスト追加に関する主要なニーズをカバーできます。ドキュメントの一括生成、承認フロー、内容出力など、さまざまな業務シーンで活用してください。
📚 さらに詳しいPDF操作のチュートリアルはこちら:
Spire.PDF for Python チュートリアルセンター