PDF 処理において、文字の追加は非常に一般的なニーズです。レポートの自動生成、注釈の追加、テンプレートへの入力、バージョン情報の記載など、Python で PDF にテキストを追加すること によって、文書処理の効率と柔軟性が大幅に向上します。 手動編集や複雑な外部ツールに頼ることなく、PDF 専用ライブラリを用いれば、数行のコードで文字を正確に挿入することが可能です。この記事では、強力な PDF 操作ライブラリ Spire.PDF for Python を使用して、PDF へのテキスト挿入手順を解説します。 コンテンツ一覧 ライブラリのインストール手順 新しい PDF を作成してテキストを追加する 既存の PDF にテキストを追加する フォント、位置、透明度、回転角度の設定 よくある問題とクロスプラットフォーム対応 まとめ よくある質問(FAQ) ライブラリのインストール手順 まずは Python 用 PDF 処理ライブラリ Spire.PDF for Python をインストールします。 pip install Spire.PDF Free Spire.PDF for Pythonをご利用の場合は以下をインストールしてください: pip install spire.pdf.free おすすめポイント: 外部ソフト不要で PDF 操作が可能 テキスト位置・書式の精密な制御に対応 既存 PDF の編集、新規作成どちらにも対応 OS を問わず動作(Windows、macOS、Linux) 新しい PDF を作成してテキストを追加する Python で 白紙の PDF を新たに作成し、テキストを挿入 するには、以下のように操作します。 サンプル:新規 PDF に文字を挿入 from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, RectangleF, PdfStringFormat, PdfTextAlignment, PdfVerticalAlignment # 新しい PDF ドキュメントを作成し、新しいページを追加 pdf = PdfDocument() page = pdf.Pages.Add() # ページに追加するテキスト(例文) text = ("本レポートは、2025年第1四半期における各製品の販売実績をまとめたものです。" + "以下に、製品カテゴリごとの総売上の内訳を示し、" + "続いて、地域別の売上比較を行います。") # フォント、ブラシ、描画位置を設定 font = PdfTrueTypeFont("Yu Gothic UI", 14.0, PdfFontStyle.Regular, True) brush = PdfSolidBrush(PdfRGBColor(0, 0, 0)) # 黒色 point = PointF(50.0, 100.0) # レイアウト領域と文字列フォーマットを設定 layoutArea = RectangleF(50.0, 50.0, page.GetClientSize().Width - 100.0, page.GetClientSize().Height) stringFormat = PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top) # テキストを描画 page.Canvas.DrawString(text, font, brush, layoutArea, stringFormat, False) # PDF ファイルとして保存して閉じる pdf.SaveToFile("output/new.pdf") pdf.Close() 🔍 技術解説: PdfTrueTypeFont() はシステムフォントを読み込み、サイズやスタイルも指定可能 PdfSolidBrush() によって文字色を設定(例:黒=(0, 0, 0)) RectangleF() でテキスト描画エリアを定義し、自動改行にも対応 PdfStringFormat() によって文字の配置(左上、中央など)を指定 DrawString() で PDF ページにテキストを描画(既存内容には影響なし) 生成されたPDFファイル: 📌 ポイント: 複数行の文字列を表示するには、Y 座標を調整したり、複数回 DrawString() を使うことで実現可能です。 既存の PDF にテキストを追加する 既存の PDF ファイルに 文字を追記する には、ファイルを読み込んで任意のページを取得し、必要な位置にテキストを描画します。 よくある用途: 注釈・コメントの追加 ステータスの記入(例:「承認済」など) テンプレートへのフィールド入力 サンプル:既存 PDF を開いて文字を追加 from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfCjkStandardFont, PdfCjkFontFamily # 既存の PDF ファイルを読み込む pdf = PdfDocument() pdf.LoadFromFile("input.pdf") page = pdf.Pages[0] # フォントを作成(Times Roman、12ポイント、太字) font = PdfCjkStandardFont(PdfCjkFontFamily.HeiseiMinchoW3, 16.0, PdfFontStyle.Bold) # 赤色のブラシを作成 brush = PdfSolidBrush(PdfRGBColor(255, 0, 0)) # 赤 # テキストの描画位置を設定 location = PointF(150.0, 110.0) # 指定位置にテキストを描画 page.Canvas.DrawString("本書類は承認されました。", font, brush, location) # 修正後の PDF を保存して閉じる pdf.SaveToFile("output/modified.pdf") pdf.Close() 🔍 技術解説: LoadFromFile() で既存 PDF を読み込み pdf.Pages[index] によりページ単位でアクセス可能 元の内容を保持しつつ、テキストを重ねて表示 PointF(x, y) でテキストの描画位置を設定(単位はポイント) 生成されたPDFファイル: 💡 必要に応じて座標を調整することで、任意の位置にテキストを自由に配置できます。 フォント、位置、透明度、回転角度の設定 テキストの見た目をカスタマイズすることも可能です。Spire.PDF for Python では、フォント・カラー・透明度・回転などのスタイル設定に対応しており、水印や強調表示の表現に便利です。 フォントとカラーの設定 # PdfTrueTypeFont を作成(Calibri、16ポイント、斜体、フォント埋め込みあり) font = PdfTrueTypeFont("Calibri", 16.0, PdfFontStyle.Italic, True) # PdfFont を作成(Times Roman、16ポイント、斜体) font = PdfFont(PdfFontFamily.TimesRoman, 16.0, PdfFontStyle.Italic) # テキストの描画色を指定する PdfBrush を作成 brush = PdfSolidBrush(PdfRGBColor(34, 139, 34)) # フォレストグリーン(濃緑) 💡 PdfTrueTypeFont を使えばフォントを PDF 内に埋め込み、他の環境でも文字化けを防げます。ファイル容量を抑えたい場合は、埋め込みなしの PdfFont を使うのも一手です。 透明度・回転角度の設定 # 現在のキャンバス状態を保存 state = page.Canvas.Save() # 半透明を設定(0.0 = 完全に透明、1.0 = 完全に不透明) page.Canvas.SetTransparency(0.4) # 原点をページの中央に移動 page.Canvas.TranslateTransform(page.Size.Width / 2, page.Size.Height / 2) # キャンバスを -45 度回転(反時計回り) page.Canvas.RotateTransform(-45) # 新しい原点位置にテキストを描画 page.Canvas.DrawString("下書き", font, brush, PointF(-50, -20)) 回転と透明度の組み合わせで、水平方向や斜め方向のウォーターマークを表現できます。 サンプル:中央に斜めの透過文字を追加 from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF from spire.pdf.common import Color # PDF ファイルを読み込む pdf = PdfDocument() pdf.LoadFromFile("サンプル.pdf") page = pdf.Pages[0] # 透かしとして描画するテキスト text = "外部提供禁止" # "Confidential" を日本語で「機密」と翻訳 # フォントを作成(Arial、40ポイント、太字、フォント埋め込みあり) font = PdfTrueTypeFont("Yu Gothic UI", 40.0, PdfFontStyle.Bold, True) # ブラシを作成(ダークブルー) brush = PdfSolidBrush(PdfRGBColor(Color.get_DarkBlue())) # ダークブルー # テキストサイズを測定して中央位置を計算 size = font.MeasureString(text) x = (page.Canvas.ClientSize.Width - size.Width) / 2 y = (page.Canvas.ClientSize.Height - size.Height) / 2 # キャンバスの状態を保存 state = page.Canvas.Save() # 透過度を 0.3(30%の不透明度)に設定 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 を保存 pdf.SaveToFile("output/with_watermark.pdf") pdf.Close() 💡 「機密」「副本」などの文字を斜めに薄く表示したい場合に有効です。複数ページへの一括挿入も可能です。 生成されたPDFファイル: ⚠ ファイルが他のプロセスによって使用中の場合、保存時に PermissionError が発生することがあります。 よくある問題とクロスプラットフォーム対応 PDF に文字を追加する際、以下のような問題が発生することがあります。主な原因と対処方法を以下にまとめます: 問題 原因 解決策 文字位置がズレる ページサイズを考慮していない ClientSize や MeasureString() を使って動的に調整 文字が表示されない フォントが未対応または不足 Arial Unicode や Noto Sans を使用し、必要に応じて埋め込み Unicode 文字が正しく表示されない フォントが対応していない 広範な Unicode 対応フォントを選定し、埋め込む テキストと本文が重なる Y 座標が近すぎる MeasureString() で高さを計測し、行間を調整 文書に透かしが表示される 有償版を未認証のまま使用している 無料版を使うか、一時ライセンスを申請 ファイルサイズが大きくなる フォントを埋め込んでいるため PdfFont を使ってフォント埋め込みを避ける macOS/Linux で表示が崩れる OS 間のフォント差異や描画方式の違い クロスプラットフォームフォントを使用し、必要ならフォントを同梱配布 まとめ Spire.PDF for Python を使えば、PDF ドキュメントに柔軟に文字を追加できます。新規作成・既存編集・バッチ処理まで対応しており、フォント・配置・スタイルも自在に調整可能です。 まずは無料版で試してみるか、一時ライセンス を取得して全機能を体験してみてください。 📌 よくある質問(FAQ) Python で PDF に文字を追加するには? DrawString() メソッドを使うことで、フォントや位置、スタイルを指定してテキストを描画できます。 既存の PDF に書き込みはできますか? はい、できます。LoadFromFile() で PDF を読み込み、対象ページに DrawString() で文字を挿入できます。 テキストファイルを PDF に変換できますか? テキスト内容を 1 行ずつ読み込み、位置を調整しながら PDF に描画することで変換可能です。 複数の PDF に同じ文字を一括追加できますか? はい。ループ処理で PDF を順次読み込み、共通のテキストを挿入することで実現できます。