複数ページあるPDFを1ページずつのファイルに分割したいという場合、Pythonでもできます。
その流れをまとめてみました。
PDFファイルを分割
PDFファイル。紙のやりとりをしないなら使う場面の多いファイルでしょう。
紙のやりとりだと郵送の手間がかかります。ただ、データにして送ればメールなどで送ればスムーズです。
決算書はファイルが複数あっても1つのPDFファイルにまとめて保管することができ、お客さまにも共有しています。
ある程度関連があるものは1つのファイルにまとめておけば管理もしやすくなります。
逆に、お客さまから資料をいただくのにPDFファイルで受け取ることがあります。原本のやりとりをしなくても済みます。ただ、ときにはまとまったファイルを1つずつのファイルに分けたいということもあるでしょう。
PDFファイルの分割です。
WindowsならCubePDF、MacならAutometer、ネットならSmall PDF、I♥PDFなどいろいろありますが、今回のネタはPythonでファイルを分割する流れです。
PDFファイルの結合を無料でやってみたいならCubePDF pageがおすすめ! | GO for IT 〜 税理士 植村 豪 OFFICIAL BLOG
PythonでPDF分割の流れ
わたしがやっているPythonのPDF分割は、もともとのファイルをINBOXのフォルダにいれておき、
Python実行後には1ページごとのファイルに分割されるというものです。
個人情報の入ったファイルでも、パソコン内で分割の処理ができるので便利です。動画をつくってみました。(3秒あたりからPythonを動かしています。)
このPDF分割のためにChatGPTに聞きながら書いたPythonがこちらです。
こちらにPythonコードが書いてあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import os import subprocess import sys # 必要なライブラリをインストールする関数 def install_and_import(package): try: __import__(package) except ImportError: try: subprocess.check_call([sys.executable, "-m", "pip", "install", package]) except subprocess.CalledProcessError: subprocess.check_call([sys.executable, "-m", "pip", "install", "--break-system-packages", package]) # PyPDF2 のインストールとインポート install_and_import("PyPDF2") from PyPDF2 import PdfReader, PdfWriter # 入力と出力が同じフォルダ inbox_folder = "指定のパス" # フォルダ内のPDFファイルを探す pdf_files = [f for f in os.listdir(inbox_folder) if f.endswith(".pdf")] # 各PDFファイルを処理 for pdf_file in pdf_files: # すでに分割されたファイルをスキップ if "_page_" in pdf_file: continue input_pdf_path = os.path.join(inbox_folder, pdf_file) # PDFを読み込む try: reader = PdfReader(input_pdf_path) except Exception: continue total_pages = len(reader.pages) # ページ数をカウント # ページが1ページの場合はスキップ if total_pages <= 1: continue # 各ページを個別のPDFとして保存 for i, page in enumerate(reader.pages): writer = PdfWriter() writer.add_page(page) # 分割後のファイル名 output_file_name = f"{os.path.splitext(pdf_file)[0]}_page_{i + 1}.pdf" output_pdf_path = os.path.join(inbox_folder, output_file_name) # 分割したPDFを保存 with open(output_pdf_path, "wb") as f: writer.write(f) # 元のPDFファイルを削除 try: os.remove(input_pdf_path) except Exception: pass |
Pythonのファイルの書き方はこちらの記事を参考にしていただければ。
Pythonで複数のCSVファイルを1つにまとめる(結合する)流れ。 | GO for IT 〜 税理士 植村 豪 OFFICIAL BLOG
まず、PythonでPDFファイルを扱うのには、ライブラリ「PyPDF2」をインストールする必要があります。
わたしの場合は仮想環境を使ってPythonを動かしているので、仮想環境に「PyPDF2」がない場合には、インストールされるようにコードに書いていますが、仮想環境を使っていなければその部分のコードは不要です。
1 |
# 入力と出力が同じフォルダ<br>inbox_folder = "指定のパス" |
のところでは、入力も出力も同じ場所にしていますが、変える場合には書き方を変える必要があります。指定のパスはご自身のパスをいれていただければ。
注意したいのは、「もしINBOXにPDFファイルがあれば分割する」とはしないこと。
なぜなら、「INBOXフォルダにPDFファイルがあれば…」いう書き方だと、分割されたPDFファイルが1ページしかなくてもさらに分割しようと動き、ファイルを書き出し続けることになるからです。
えぇ、実際に書いて無限地獄にハマって失敗しました…。
それならば…と「PDFファイルが1ページだけなら分割しない(スキップ)」とすれば、PDFファイルの分割が止まります。
あとは、現状は分割前のファイルは削除する設定にしてあります。
分割前のファイルに戻したい場合には、ファイルを結合すればいいですし、Macだとプレビューを使えば新たにまとまったファイルをつくれるので。こちらの記事も参考にしていただければ。
Pythonで複数のCSVファイルを1つにまとめる(結合する)流れ。 | GO for IT 〜 税理士 植村 豪 OFFICIAL BLOG
ChatGPTでPythonは学べるか?
ChatGPTを使うことによって、プログラミングの敷居は下がったといえます。
それでもプログラミングをやる意味があるかどうか。わたしはあると考えています。
以前はコード1つ1つまで正確にわからないと、動かすことはできませんでした。1文字でも違えばエラーです。
その点は今でも変わりはないのですが、ただ以前よりもあいまいな知識でも体験がしやすくなっています。
ただ、ChatGPTに聞いたところでエラーは出ることがあります。それでもエラーが出た理由はなぜか?どう対処すればいいか?というのを考えるのだけでも勉強できます。
今回のネタであれば、無限ループになってしまった体験から、プログラミングでどう動くかにも気づけて、どうすれば無限ループにならなくても済むかを考えるわけです。
プログラミングで「〇〇をやってみたい」というのがあれば、ChatGPTとのやりとりを繰り返せば、動かせるところまでたどり着きやすくなりましたし、プログラミングでどう効率化できるかも味わえます。
ご興味があれば試してみましょう。今の仕事でも〇〇がやってみたいということがあれば、解決できるかもしれません。
【編集後記】
昨日は相続の仕事をやってから、紅葉を見に香嵐渓へ。平日でもある程度人はいて、外国の方が多かったです。写真も撮ってきました。今は円安ですからね。帰りにカフェによってから夕方に長男(9)のサッカー教室のお迎えに。寒いからと終わったあとの練習はなしでした。
【昨日の1日1新】
※「1日1新」→詳細はコチラ
内山味噌店「味噌屋 謹製」 天然酵母と発酵バターの食パンラスク
ひとりで香嵐渓