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?

pyPDFを使用した簡易PDF結合ツールを作った

Posted at

概要

タイトルに示す通り,PDFファイルに対して様々な加工を行う機能を備えたPythonの非標準ライブラリ「pyPDF」を用いた簡易的なPDF結合ツールを作った.このツールを用いることで複数のpdfファイルを結合して1つのpdfファイルを生成することができる.
pyPDFにはPDFMargerクラスというクラスがもともと存在しており,結合にはこれが用いられていたようであるが,このクラスは将来的に廃止されてしまうらしい.そのため今回は公式ドキュメントで利用を推奨されているPDFWriterクラスを用いた.

前提

  • 使用OS: Windows11
  • Pythonのバージョン:3.11.8

使用するライブラリ

  • pyPDF: PDFの様々な加工や読み取りを行う非標準ライブラリ.次の項でインストールする.
  • glob: 指定した条件を満たすパスの一覧を取得する機能を備えたライブラリ.標準なのでインストールの必要はない.
  • time: sleep関数を使用するためにimportする.こちらも標準

準備

以下のコマンドによりpyPDFをpipでダウンロードした.

pip install pypdf

ツールの構成

ツールは下記に示すディレクトリで構成される.file_to_mergeディレクトリには結合したいファイルを配置し,結合されたファイルはmergedディレクトリに配置する.またこの他に結合を行うmerge.pyをmergerディレクトリ下に配置する.

merger
├─file_to_merge
└─merged

merger.py

merger.pyのコードを以下に示す.

merger.py
import glob
from pypdf import PdfWriter
import time

# glob.glob: 指定した条件を満たすパスをすべて取得し,リストを返す
file = glob.glob("/pdf_merger/file_to_merge/*")
merger = PdfWriter()

# pdfファイルを順にmerge
for pdf in file:
    merger.append(pdf)

# mergedディレクトリに結合されたファイルを書き出し
merger.write("/pdf_merger/merged/merged.pdf")
merger.close()

# 処理の終了を知らせる出力
print("finish")
time.sleep(1)

動作(使用方法)

merger/file_to_mergeに結合したいファイルを配置し,merger.pyを実行するとmerger/mergedにmerged.pdfが生成される.

まとめ

pypdfとその他いくつかのライブラリを用いて複数のpdfファイルを結合するツールを作ることができた.guiは実装していないながら,一応の実用性を担保できたのではないかと思う.

参考

MergingPDFFiles: pyPDFのユーザーガイド.PDFファイルを結合する方法が紹介されている.globを使用した以外はほぼすべてここを参考にしています.
https://pypdf.readthedocs.io/en/stable/user/merging-pdfs.html

Pythonで条件を満たすパスの一覧を再帰的に取得するglobの使い方:glob関数はこちらを参考にしました
https://note.nkmk.me/python-glob-usage/

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?