LoginSignup
3
1

More than 1 year has passed since last update.

【Python + PDF】Google DriveのPDFを結合+α

Last updated at Posted at 2022-07-30

試験期間

ワイ 「試験勉強やだ〜」
ワイ 「〇〇1回.pdf, 〇〇2回.pdf ...を開いて・・・」
ワイ 「あほかいな! 全部で15個PDFを開かなあかんがな!」

姉 「PDF結合したら良くない?」
姉 「調べてみたけど、すぐにできそうだよ」

ワイ 「で、でも、何かウイルス混入したら嫌なんや」
ワイ 「結合以外にも例えばBookMarkつけたいし・・・」

姉 「Adobe Acrobatなら...」
ワイ 「お金かかりそうだから却下や!却下!」
ワイ 「・・・」
姉 「・・・」

ーーカタカタカタ・・・タン!(Enterを強く押す音)
ワイ 「なるほど、Pythonだと簡単にPDF結合できるんやな!」

閑話休題

こんにちは、Bana7です。
今回はGoogle Driveに保存されているPDFを結合してくれるコードを書いてみました。

一緒に勉強会資料や授業資料のPDFを結合してみましょう!

GitHubリポジトリ

スクリーンショット 2022-07-30 21.32.48.png

なぜGoogle Driveなのか

私がGoogle Driveにこだわるのは、共有がしやすい。ただそれだけです。スマホからでも、PCからでもアクセスできるのはやはり良いです。

加えて、今回は誰でも簡単に実行できるように,Google Colabの環境を用いるためでもあります。

環境・ライブラリ

主なライブラリ:PyPDF2
環境: Google Colab

実際に結合してみよう!

こちらをクリックするとGoogle Colabが開かれます。

また今回は/pdf/test/に以下の3つのPDFを配置しました。これらのPDFを結合します。

スクリーンショット 2022-07-31 0.50.31.png

インストール & import

実装にあたり不必要なライブラリもimportされていますが、気にしないでください

スクリーンショット 2022-07-31 0.46.27.png

PDFファイル取得

基本的に画面右側のUIに入力するだけで実行できるようになっています。
dirPathにpdf/test/と入力すると、結果が得られていることが確認できます。

スクリーンショット 2022-07-31 0.54.16.png

ファイル名変更

結合するファイルが全てフォーマットされているとは限りません。
そこで以下の関数を用いて任意の形にフォーマットを行います。
処理としてはreplaceとos.renameを用いているだけです。

def changeFilesName(files: List[str], old: str, new: str) -> List[str]:
    """ファイル名を変更する&driveの方にも適用する - change FIles Name

    Args:
        files (list[str]): files path list
        old (str): Required. String to be replaced.
        new (str): Optional. String to replace the old one.

    Returns:
        list[str]: Processed list
    
    Examples:
        When you want to delete the string "hoge" in a list
        files = changeFilesName(files, "hoge", "")
    """
    newFiles = [pdfName.replace(old, new) for pdfName in files]
    [os.rename(pdfFile, newPdfFile) for pdfFile, newPdfFile in zip(files, newFiles)]
    return newFiles

oldに"_", "ああ"と入力し実行するときちんとフォーマットされたファイル名になりました!

スクリーンショット 2022-07-31 0.57.39.png

Google Driveの方もしっかりrenameされているのが確認できます!
スクリーンショット 2022-07-31 1.01.31.png

並び替え

今回は1,2,3と並んでいますが、連番のPDFファイルを結合するときに、読み込んだPDFファイルが昇順で並んでいないことがあります。

そこでnatsort (UI上では"ascending"に対応)をしてあげます。

他にも並び替えできるようにしていますが、おそらく使うことはないのでYAGNI原則に反則していますが、念の為に実装しました。
スクリーンショット 2022-07-31 1.06.41.png

もし、これで連番に並び替えされていない場合は再びフォーマットしてから、実行してみてください

ページ数取得

後ほど、BookMark(しおり)を追加するためにページ数を取得します。
スクリーンショット 2022-07-31 1.11.41.png

少し分かりづらいですが、このライブラリではPDFは0indexなので、機能拡張する際は注意が必要です。

出力

(もっと良い変数の命名規則があったと思いますが)
pdfName,exportPathにそれぞれ入力し実行するとPDFが結合されます。

スクリーンショット 2022-07-31 1.16.21.png

実際に生成されているのが確認できました。

スクリーンショット 2022-07-31 1.17.53.png

BookMark追加

ここからが本題です。PDFを結合してくれるサービスはありますが、BookMarkもつけてくれるサービスはなかなか無いと思います。加えて、PDFを圧縮してくれるようにしました。

しかし、PDF圧縮に関しては1MB程度の圧縮しか見られなかったので、要アップデートです。

スクリーンショット 2022-07-31 1.21.06.png

完成したPDFを確認

無事にPDF結合ができました!これで勉強がしやすくなりました!

スクリーンショット 2022-07-31 1.22.44.png

最後に

今回はGoogle DriveのPDFを結合するといった、ちょっとしたツール作成を行いました。
よかったら試してみていただけると幸いです。
定期的に改良を行っていくので、よろしくお願いします!

リポジトリ

3
1
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
3
1