利用方法
- ライブラリのインストール(初回のみ): お使いのPCのターミナル(またはコマンドプロンプト)で、以下のコマンドを実行して必要なライブラリをインストールしてください。
pip install python-pptx
- 設定セクションをカスタマイズ:
- スクリプト冒頭の
# --- テンプレート設定 ---
セクションを開きます。
"output_filename"
に、作成したいファイル名を入力します。
"company_name"
や "copyright_text"
を自社の情報に変更します。
"main_font"
を、PCにインストールされているお好みの日本語フォント名(例: 'メイリオ'
, 'MS Pゴシック'
など)に変更します。
- 各
...font_size
の値を変更して、全体の文字サイズを調整します。
...color
の値を変更して、キーカラーを調整します。
- スクリプトの実行: 設定を編集・保存した後、ターミナルで以下のコマンドを実行します。
python create_ppt_template.py
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE_TYPE
from datetime import datetime
# =============================================================================
# --- テンプレート設定 ---
# このセクションの値を変更するだけで、テンプレート全体のデザインをカスタマイズできます。
# =============================================================================
SETTINGS = {
# --- ファイルと基本情報 ---
"output_filename": "Corporate_Template.pptx",
"company_name": "株式会社 YOUR COMPANY",
"copyright_text": f"© {datetime.now().year} YOUR COMPANY NAME",
# --- 基本フォント ---
"main_font": "Yu Gothic", # PCにインストールされているフォント名(例: 'メイリオ', 'MS Pゴシック')
# --- ヘッダー・フッターの文言とフォントサイズ ---
# ヘッダー
"header_left_text": "重要書類",
"header_left_font_size": 10,
# フッター
"footer_left_company_name_font_size": 11,
"footer_center_copyright_font_size": 10,
"footer_right_page_number_font_size": 11,
# --- 各スライド要素のフォントサイズ ---
"main_title_font_size": 48, # 表紙のメインタイトル
"subtitle_font_size": 28, # 表紙のサブタイトル
"page_title_font_size": 36, # 各ページのタイトル
"page_content_font_size": 18, # 各ページのコンテンツ(本文)
# --- 色設定 (RGB) ---
"header_footer_color": RGBColor(128, 128, 128), # ヘッダー・フッターの文字色 (灰色)
"title_color": RGBColor(0, 51, 102), # 各ページタイトルの色 (濃い青)
"body_text_color": RGBColor(50, 50, 50), # 本文の文字色 (濃い灰色)
"main_title_color": RGBColor(0, 0, 0), # メインタイトルの色 (黒)
}
# =============================================================================
# --- プレゼンテーション生成ロジック ---
# 基本的にこのセクションは変更する必要はありません。
# =============================================================================
def apply_font_style(run, font_name, size_pt, color_rgb=None, bold=False):
"""テキスト(run)にフォントスタイルを適用するヘルper関数"""
font = run.font
font.name = font_name
font.size = Pt(size_pt)
font.bold = bold
if color_rgb:
font.color.rgb = color_rgb
def create_template():
"""設定に基づいてPowerPointテンプレートを生成します。"""
prs = Presentation()
prs.slide_width = Inches(16)
prs.slide_height = Inches(9)
# --- スライドマスターの編集 (全スライド共通のヘッダー・フッターを設定) ---
slide_master = prs.slide_masters[0]
# Iterate through shapes on the master and modify existing text boxes
for shape in slide_master.shapes:
if shape.has_text_frame:
tf = shape.text_frame
# Simple heuristic: check vertical position to guess header/footer area
# This is not foolproof and depends heavily on the default template
if shape.top < Inches(1): # Likely header area
# Attempt to add header text
tf.clear()
p = tf.paragraphs[0]
run = p.add_run()
run.text = SETTINGS["header_left_text"]
apply_font_style(run, SETTINGS["main_font"], SETTINGS["header_left_font_size"], SETTINGS["header_footer_color"])
p.alignment = PP_ALIGN.LEFT
elif shape.top > Inches(8): # Likely footer area
tf.clear()
p = tf.paragraphs[0]
# Attempt to add Company Name (left)
run = p.add_run()
run.text = SETTINGS["company_name"]
apply_font_style(run, SETTINGS["main_font"], SETTINGS["footer_left_company_name_font_size"], SETTINGS["header_footer_color"])
p.alignment = PP_ALIGN.LEFT
# Attempt to add Copyright (center)
# This might overwrite the previous text or append depending on the shape structure
# A better approach is to find specific placeholders if they exist
# For demonstration, let's just add it as a new paragraph if possible
if len(tf.paragraphs) > 0:
p = tf.add_paragraph()
run = p.add_run()
run.text = SETTINGS["copyright_text"]
apply_font_style(run, SETTINGS["main_font"], SETTINGS["footer_center_copyright_font_size"], SETTINGS["header_footer_color"])
p.alignment = PP_ALIGN.CENTER
# Attempt to add Page Number (right)
if len(tf.paragraphs) > 0:
p = tf.add_paragraph()
run = p.add_run()
run.text = "{}" # Placeholder for slide number
apply_font_style(run, SETTINGS["main_font"], SETTINGS["footer_right_page_number_font_size"], SETTINGS["header_footer_color"])
p.alignment = PP_ALIGN.RIGHT
# --- サンプルスライドの生成 ---
# 1. 表紙スライド
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
slide.display_master_shapes = False # 表紙ではヘッダー/フッターを非表示
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "ここにメインタイトルを入力"
subtitle.text = "ここにサブタイトルを入力\n日付や部署名など"
# フォント設定
apply_font_style(title.text_frame.paragraphs[0].runs[0], SETTINGS["main_font"], SETTINGS["main_title_font_size"], SETTINGS["main_title_color"], bold=True)
apply_font_style(subtitle.text_frame.paragraphs[0].runs[0], SETTINGS["main_font"], SETTINGS["subtitle_font_size"], SETTINGS["body_text_color"])
# Check if there is a second paragraph before applying style
if len(subtitle.text_frame.paragraphs) > 1 and subtitle.text_frame.paragraphs[1].runs:
apply_font_style(subtitle.text_frame.paragraphs[1].runs[0], SETTINGS["main_font"], SETTINGS["subtitle_font_size"], SETTINGS["body_text_color"])
# 2. コンテンツスライド
content_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(content_slide_layout)
title = slide.shapes.title
title.text = "各ページのタイトル"
apply_font_style(title.text_frame.paragraphs[0].runs[0], SETTINGS["main_font"], SETTINGS["page_title_font_size"], SETTINGS["title_color"], bold=True)
content = slide.placeholders[1]
tf = content.text_frame
tf.clear() # 既存のテキストをクリア
p = tf.add_paragraph() # Add a new paragraph after clearing
p.text = "ここに本文を入力します。"
apply_font_style(p.runs[0], SETTINGS["main_font"], SETTINGS["page_content_font_size"], SETTINGS["body_text_color"])
# 箇条書きレベルのスタイル設定
p = tf.add_paragraph()
p.text = "箇条書きレベル1"
p.level = 1
apply_font_style(p.runs[0], SETTINGS["main_font"], SETTINGS["page_content_font_size"], SETTINGS["body_text_color"])
p = tf.add_paragraph()
p.text = "箇条書きレベル2"
p.level = 2
apply_font_style(p.runs[0], SETTINGS["main_font"], SETTINGS["page_content_font_size"], SETTINGS["body_text_color"])
# --- ファイルに保存 ---
prs.save(SETTINGS["output_filename"])
print(f"'{SETTINGS['output_filename']}' としてテンプレートを保存しました。")
if __name__ == '__main__':
create_template()
コメント