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にテキストを追加する:新規作成と編集

Posted at

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:
2025-07-11_174935.png


既存の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)、原点はページ左上。
  • 領域指定なしで、短いラベルやスタンプに最適です。

修正後のPDF:
2025-07-11_175200.png


複雑な書式設定:透明で斜めのテキストウォーターマークを追加

文書のレビュー用や内部版の配布では、透明度と回転角度を持つウォーターマークを付けて、機密性を示したり誤配布を防止することが一般的です。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() を活用し、他の要素に影響を与えずに局所的な描画設定を適用。

ウォーターマーク付きPDF:
2025-07-11_175747.png


まとめ

Spire.PDF for Python を使えば、シンプルなPythonコードでPDFに多様なテキストを追加できます。主な機能は以下の通りです。

機能 方法・ポイント
✅ 新規ドキュメント作成 PdfDocument.Pages.Add() + DrawString()
✅ 既存ドキュメントに挿入 LoadFromFile() + PointF で挿入位置を指定
✅ レイアウト制御 RectangleF + PdfStringFormat で配置・領域調整
✅ 複数行テキスト対応 テキスト内に \n を含めれば自動改行
✅ フォント・色設定 TrueType フォント、標準フォント、RGBカラーを自由設定

これら3つの方法を活用することで、PDFのテキスト追加に関する主要なニーズをカバーできます。ドキュメントの一括生成、承認フロー、内容出力など、さまざまな業務シーンで活用してください。


📚 さらに詳しいPDF操作のチュートリアルはこちら:
Spire.PDF for Python チュートリアルセンター

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?