校務の時短・効率化

【ICT担当の先生が教える】メモ帳ひとつで「PDF自動分割ツール」を作る方法!≪コピペOK≫

kaorusensei06
ゆとり先生
ゆとり先生

さて、何を作りましょうか

かおる先生
かおる先生

保護者会の会長さんからもらった資料なんですが、pdfでたくさんあるんです。児童に配るのは一部分なのですが……

ゆとり先生
ゆとり先生

それ、わたしやりますよ!

かおる先生
かおる先生

いいんですか?印刷して該当のページだけもう一回スキャンしようと思ってました……

ゆとり先生
ゆとり先生

もっと簡単にできますよ!

Contents
  1. 1.なぜ「メモ帳」と「Python」なのか?
  2. 2. これがないと始まらない「下準備」
  3. 3. 実践!メモ帳でコードを書く
  4. 4. プログラム解析:この「呪文」は何をしているのか?
  5. 4.5 【コピペでOK】コードの仕組みを1行ずつ解読!
  6. 5. 【重要】初心者が必ずハマる「3つの落とし穴」
  7. 6. これをコピペすれば完成!「PDF分割ツール」全文
  8. 6.5 運命の瞬間!実行方法と「自分専用ソフト」にする方法
  9. 7. 学校で試せる4つの活用場面
  10. 8. さらに差がつく!Python時短の裏技(プロの視点)
  11. 9. 繰り返す作業を減らして、時間を取り戻す
Google AdSense

1.なぜ「メモ帳」と「Python」なのか?

  • あなたのPCは、実は「魔法の杖」です。
    • 学校でよくある、PDFを印刷して必要な部分をスキャンし直す作業。この記事では、PDFを指定したページ数ごとに分けるツールをPythonで作ります。初めての設定には時間がかかりますが、一度動けば、同じ形式の資料で繰り返し使えます。学校のPCでは、ソフトの導入が認められているかを先に確認してください。
  • VS Code(専用ソフト)は使いません。
    • あえてWindows標準の「メモ帳」を使うことで、パソコンの仕組みをダイレクトに体験しましょう。
  • プログラマーの秘密: 全部暗記している人はいません。見よう見まねで、目の前の仕事を楽にすること。それがプロへの第一歩です。

2. これがないと始まらない「下準備」

Pythonを動かすために必要な「部品」をコマンドプロンプト(黒い画面)で1つだけ追加します。

はじめに読みたい
【ICT担当の先生が教える】WindowsでPythonをインストールする方法|初心者がハマるエラー対処法
【ICT担当の先生が教える】WindowsでPythonをインストールする方法|初心者がハマるエラー対処法

PDFを扱うための「道具箱」をインストール

CMDを開き、以下のコマンドを打ち込みます。

pip install pypdf
  • 解説:Python自体はシンプルな状態。そこに「PDFを操作する能力」を後付けする作業です。

3. 実践!メモ帳でコードを書く

メモ帳を開き、提示されたコードを貼り付けます。ここでは「保存」が最大の難所です。

運命の保存作業

  1. ファイル名:pdf_split.py(最後に必ず .py をつける)
  2. 文字コード:UTF-8(これにしないと日本語が化けます)

4. プログラム解析:この「呪文」は何をしているのか?

初心者の方が「うわ、難しそう…」と感じる部分を、先生方の日常に例えて解読します。

① import = 助っ人を呼ぶ

コードの最初にある import。これは、「PDFのプロ」「ファイルのプロ」「システムのプロ」という3人の助っ人を職員室に呼び出しているイメージです。

② os.path.join = 住所の整理

「元PDF(分割前)」というフォルダ名が出てきます。これはプログラムが「どこに荷物を置いて、どこに完成品を出すか」という住所(パス)を自動で作ってくれる命令です。

③ try...except = 保健室のような安心感

もしPDFが壊れていたり、変な文字を入力したりしても、プログラムがパニックになって止まらないように「エラーが起きても優しく受け止める」ための仕組みです。

4.5 【コピペでOK】コードの仕組みを1行ずつ解読!

ここでは、実際に使うコードの主要なパーツがどんな「役割」を担っているのか、職員室の業務に例えて解説します。

準備:助っ人を呼ぶ(インポート)

Python

from pypdf import PdfReader, PdfWriter
import os
import sys
  • pypdf: PDFを「読む人」と「書く人」を専門業者から派遣してもらいます。
  • os / sys: Windows(パソコン自体)の操作を得意とするベテラン職員です。

1:作業スペースの確保

Python

    input_folder = os.path.join(base_dir, "元PDF(分割前)")
    output_folder = os.path.join(base_dir, "分割完了")

「どこから書類を持ってきて、どこに置くか」のトレイを決めています。もしフォルダがなければ、プログラムが気を利かせて自動で作ってくれます。

2:PDFの中身をスキャン

Python

            reader = PdfReader(input_path)
            total_pages = len(reader.pages)

「このPDF、全部で何ページあるかな?」と数えています。人間が数える必要はありません。

3:1枚ずつ新しいファイルに綴じる

Python

            for i in range(0, total_pages, pages_per_split):
                writer = PdfWriter()
                # (中略)
                output_filename = f"{base_name}_{part_num:02d}.pdf"

ここで「1ページ目から、指定した枚数分だけ切り取って、新しい名前をつけて保存する」というループ作業をしています。人間なら発狂しそうな反復作業ですが、Pythonは1秒間に何十回もこなします。


5. 【重要】初心者が必ずハマる「3つの落とし穴」

落ち穴1:全角・半角のトラップ

  • 動かないときは、まず画面に出たエラー文を読みます。全角の記号やスペース、ファイル名、保存場所、必要な部品の不足など、原因は複数あります。コードを貼り直す前に、エラーが示す行と文字を確認しましょう。

落ち穴2:拡張子「.txt」が隠れている

  • pdf_split.py と名付けたつもりが、実は pdf_split.py.txt になっていることがあります。Windowsの「表示」タブから「ファイル名拡張子」にチェックを入れる方法を丁寧に図解。

落ち穴3:フォルダの場所

  • プログラム(.pyファイル)と同じ場所にフォルダが自動で作られます。「どこに行ったかわからない!」とならないよう、専用のフォルダを一つデスクトップに作ってから作業しましょう。

6. これをコピペすれば完成!「PDF分割ツール」全文

お待たせしました。メモ帳を開き、以下のコードをすべてコピーして貼り付けてください。

【ポイント】

  1. メモ帳に貼り付ける。
  2. 名前を pdf_split.py にして保存。
  3. 保存するときに、下の方にある「文字コード」を UTF-8 に変えるのを忘れずに!
from pypdf import PdfReader, PdfWriter
import os
import sys

def split_pdf():
    # 1. プログラムがある場所(フォルダ)を特定する
    # これにより、どこにファイルを置けばいいか自動で決まります
    base_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
    
    # フォルダの名前を設定
    input_folder = os.path.join(base_dir, "元PDF(分割前)")
    output_folder = os.path.join(base_dir, "分割完了")

    print("=" * 40)
    print("      PDF 分割ツール (先生応援版) ")
    print("=" * 40)

    # 2. フォルダがなければ自動作成
    if not os.path.exists(input_folder):
        os.makedirs(input_folder)
        os.makedirs(output_folder)
        print(f"★作業用フォルダを新しく作成しました。")
        print(f"  1. 「{os.path.basename(input_folder)}」に分割したいPDFを入れてください。")
        print(f"  2. もう一度このプログラムを起動してください。")
        input("\n[Enterキーを押すと終了します]")
        return

    # 3. フォルダの中からPDFファイルを探し出す
    files = os.listdir(input_folder)
    pdf_files = [f for f in files if f.lower().endswith('.pdf')]
    
    if not pdf_files:
        print(f"エラー:「{os.path.basename(input_folder)}」にPDFが入っていません!")
        input("\n[Enterキーを押すと終了します]")
        return

    # 4. ユーザー(あなた)に分割のルールを聞く
    print(f"現在、{len(pdf_files)} 個のPDFが見つかりました。")
    print("1つのファイルにつき、何ページずつに分けますか?")
    try:
        pages_per_split = int(input("数値を入力してください (例:1枚ずつなら 1) > "))
        if pages_per_split < 1:
            pages_per_split = 1
    except ValueError:
        print("数値以外が入力されたため、1ページずつ分割として処理します。")
        pages_per_split = 1

    print("-" * 40)

    # 5. 実際の分割処理(ここがメインの仕事です)
    for filename in pdf_files:
        input_path = os.path.join(input_folder, filename)
        
        try:
            reader = PdfReader(input_path)
            total_pages = len(reader.pages)
            base_name = os.path.splitext(filename)[0]
            
            print(f"処理中... {filename} (全部で {total_pages} ページあります)")

            part_num = 1
            for i in range(0, total_pages, pages_per_split):
                writer = PdfWriter()
                
                # 指定されたページ数分だけ、新しいPDFにコピーする
                for j in range(i, min(i + pages_per_split, total_pages)):
                    writer.add_page(reader.pages[j])
                
                # 分割後のファイル名(例:テスト_01.pdf)
                output_filename = f"{base_name}_{part_num:02d}.pdf"
                output_path = os.path.join(output_folder, output_filename)
                
                with open(output_path, "wb") as f_out:
                    writer.write(f_out)
                
                part_num += 1
            
            print(f"  -> 成功! {part_num - 1} 個のファイルにバラしました。")

        except Exception as e:
            print(f"× 失敗してしまいました: {filename} -> 原因: {e}")

    print("-" * 40)
    print("すべての作業が完了しました。お疲れ様でした!")
    print(f"「{os.path.basename(output_folder)}」フォルダを確認してくださいね。")
    input("\n[Enterキーを押すと終了します]")

if __name__ == "__main__":
    split_pdf()

6.5 運命の瞬間!実行方法と「自分専用ソフト」にする方法

せっかく作ったプログラムも、動かし方を知らなければ宝の持ち腐れです。誰でもできる2つのステップを解説します。

ステップ①:基本の実行方法(まずは動かしてみる)

  1. 作成した pdf_split.py があるフォルダを開きます。
  2. フォルダの上の「アドレスバー」をクリックし、cmd と打って Enter を押します。
  3. 黒い画面(コマンドプロンプト)が開いたら、以下の呪文を打って Enter!
python pdf_split.py

※もし動かなければ


py pdf_split.py

と打ってみてください。 

ステップ②:EXEファイル化(自分専用ソフトに変身!)

毎回コマンドを打つのは大変ですよね。Pythonには、プログラムを「ダブルクリックで動くアイコン(EXEファイル)」に変える魔法があります。

  1. 専用の道具をインストール コマンドプロンプトで以下の呪文を打ちます(一度だけでOKです)。pip install auto-py-to-exe
  2. 変換ツールを起動 インストールが終わったら、同じ画面で以下を打って Enter。auto-py-to-exe すると、初心者でも分かりやすい「ボタン操作だけの画面」が立ち上がります!
  3. 設定して変換!
    • Script Location: pdf_split.py を選択。
    • One File: 「One File(1つのファイルにまとめる)」を選択。
    • 一番下の大きな青いボタン「CONVERT .PY TO .EXE」をクリック!
  4. 完成! しばらく待つと output というフォルダの中に、おなじみのアイコンがついた EXEファイル が出来上がります。

これでもう、Pythonが入っていない同僚の先生のPCでも、このファイルを渡すだけでPDF分割ができるようになります。まさに「先生メイド」の便利ソフトの誕生です!


7. 学校で試せる4つの活用場面

「PDFを分けるだけ?」と思うかもしれませんが、学校の業務に当てはめると、実はこんなに使い道があります。

① 児童のテスト・通知表データの仕分けに

一人分の資料が必ず1ページに収まっているなら、1ページずつ分ける方法が使えます。ただし、このコードは児童名や出席番号を読み取って仕分けるものではありません。元のページ順に連番で保存するため、誰の資料か、ページの対応に誤りがないかを確認してください。

② 必要なページだけを「配布用」に切り出す

このコードは、先頭から指定したページ数ごとにPDFを分割します。離れたページを任意に選ぶ機能はありません。分割後のファイルから必要なものを選び、配布前に内容と共有できる範囲を確認してください。

③ ギガスクール端末への「課題配布」に

ロイロノートやGoogle Classroomで課題を配る際、大きなPDFだと子供の端末が重くなることがあります。必要なページだけを切り出して配ることで、通信環境にも優しい授業が実現します。

④ 添付メールの容量制限を突破する

分割後に、各ファイルの容量がメールの添付上限に収まるかを確認します。このコードは容量を見て自動調整したり、画像を圧縮したりするものではありません。機密情報を含む資料は、学校が認めた共有方法を使ってください。


8. さらに差がつく!Python時短の裏技(プロの視点)

ツールを動かせたら、毎回の起動やファイル整理を少し楽にしておきましょう。ここからは、同じ作業を繰り返すときの工夫を紹介します。

裏技A:フォルダを「右クリック」で開く

コマンドプロンプトでいちいち場所(cdコマンド)を打つのは大変です。

  • 時短技:作業フォルダを開いた状態で、アドレスバーに「cmd」と打ち込んでEnter。これだけで、その場所を起点に黒い画面が開きます!

裏技B:元ファイル名と連番で整理する

今回のプログラムは 元ファイル名_01.pdf のように書き出されます。

  • 時短技:元のPDFに内容が分かる名前を付けておくと、分割後も元資料と連番を対応させやすくなります。連番はページの順序で、児童の出席番号とは限りません。

裏技C:デスクトップにショートカットを作る

毎回コードをコピペする必要はありません。

  • 時短技:一度作った .py ファイルを右クリックして「ショートカットの作成」を選び、それをデスクトップに置いておけば、次からはダブルクリックするだけで魔法が始まります。

9. 繰り返す作業を減らして、時間を取り戻す

時間短縮の幅は、PDFの大きさやPCの環境、確認の手間によって変わります。それでも、印刷と再スキャンを繰り返していた仕事を、ファイルのまま処理できる点には意味があります。まずは個人情報を含まない資料で試し、元のPDFを残したうえで、分割後のページ数と内容を確かめてください。

設定にかかった時間と、次から減った作業を見比べてみましょう。小さな時短でも、繰り返す仕事なら積み重なります。その時間を授業の準備に使っても、早く帰るために使ってもいいと思います。

メモ帳に加えてPythonとPDFを扱う部品が必要なので、準備なしで動くわけではありません。「自分にもできた」と思えるところまで、無理のない範囲で試してみてください。初回の設定が面倒なことも含めて、次の仕事を楽にするための道具です。

さあ、次はどんな「面倒くさい」を退治しましょうか? あなたの挑戦を、心から応援しています!

ゆとり先生
ゆとり先生

ね、簡単でしょ

かおる先生
かおる先生

簡単詐欺にあいました……

ゆとり先生
ゆとり先生

次からはこれを使えばすぐに終わりますので、長い目で見れば簡単でとっても早いです!

かおる先生
かおる先生

価値観が長命種なんですか?

ゆとり先生
ゆとり先生

学校は基本的に発生する業務は子どもにかかわること以外毎年同じような業務が発生しやすい環境です。なので、1つずつこういった作業をシステム化することは業務改善になるはずです。

かおる先生
かおる先生

なるほど、プログラム?ソフトをつくることと相性がいいんですね。

ゆとり先生
ゆとり先生

そうです、楽をするために苦労するって感じですね。

児童に努力しなさいと言っていますよね言っていますよね。我々の努力はこういったところに必要です。まぁコピペでいいので幾分か楽ではありますね。

Xからの読者コメントをお待ちしています。
ブログ更新の励みになります!
Google AdSense
ABOUT ME
かおる先生
かおる先生
小学校教諭
大学・大学院では教育や技術について学び、小学校教諭免許に加えて、中学校(技術)および高等学校(情報・工業)の専修免許も取得しました。 「知ることの入り口」に立つ児童たちに、わかりやすく伝えることに大きなやりがいを感じ、現在は小学校の教員として日々子どもたちと向き合っています。またこの場では、日々の教育現場で役立っている業務効率化や時短の工夫、ちょっとした小技に加えて、趣味でもあるガジェットについての話題も交えながら、さまざまな情報をまとめていきたいと考えています。
Google AdSense
記事URLをコピーしました