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?

Python ツール #5 ― PDF 操作(回転、結合)

Last updated at Posted at 2024-06-08

Python ツール #5 ― PDF 操作(回転、結合)

たまたま、今回、たくさんの PDF ファイルの中身を回転させたり結合させたりする必要がありましたので、その Python スクリプトを開発してみました。1
今後の実務で複雑な PDF 操作をするかもしれないので、そのときは、今回の Python スクリプトをスニペット(断片ソースコード)として再利用しようと思います。2

ソースコードの簡単な説明

  • pdf_rotater.py(Python スクリプト)。・・・ PDF 回転
    pdf_rotater.py
    #!/usr/bin/env python3
    
    ・・・
    
    # Import Libraries
    import os
    import sys
    import PyPDF2
    from pathlib import Path
    
    # Constants
    IN_DIR = '.\\input_rotater'
    OUT_DIR = '.\\output_rotater'
    ROTATE_ANGLE = 270    # 90, 180, 270
    
    
    # Main
    def main() -> None:
    
        in_file_list = list(Path(IN_DIR).glob("**/*.pdf"))
        for in_file_name in in_file_list:
            print('%s' % in_file_name)
            if os.path.isfile(in_file_name):
                in_file = open(in_file_name, 'rb')
                reader = PyPDF2.PdfReader(in_file)
                writer = PyPDF2.PdfWriter()
                for page in range(0, len(reader.pages)):
                    obj = reader.pages[page]
                    obj.rotate(ROTATE_ANGLE)
                    writer.add_page(obj)
                _, out_file_name = os.path.split(in_file_name)
                in_file.close()
                out_file = open(os.path.join(OUT_DIR, out_file_name), 'wb')
                writer.write(out_file)
                out_file.close()
    
        sys.exit(0)
    
    
    # Goto Main
    if __name__ == '__main__':
        main()
    
    入力フォルダーの .pdf ファイル数分ループし、PDF ファイルの全ページを 270 度回転して、出力フォルダーに PDF ファイルを保存します。
  • pdf_merger.py(Python スクリプト)。・・・ PDF 結合
    pdf_merger.py
    #!/usr/bin/env python3
    
    ・・・
    
    # Import Libraries
    import os
    import sys
    import PyPDF2
    from pathlib import Path
    
    # Constants
    IN_DIR = '.\\input_merger'
    OUT_DIR = '.\\output_merger'
    OUT_NAME = 'merged.pdf'
    
    
    # Main
    def main() -> None:
    
        merger = PyPDF2.PdfMerger()
    
        in_file_list = list(Path(IN_DIR).glob("**/*.pdf"))
        for in_file_name in in_file_list:
            print('%s' % in_file_name)
            if os.path.isfile(in_file_name):
                merger.append(in_file_name)
    
        merger.write(os.path.join(OUT_DIR, OUT_NAME))
        merger.close()
    
        sys.exit(0)
    
    
    # Goto Main
    if __name__ == '__main__':
        main()
    
    入力フォルダーの .pdf ファイル数分ループし、1 つの PDF ファイルに合併し、出力フォルダーに PDF ファイル “merged.pdf” を保存します。

ソースコードの置き場所

参考

PDF ライブラリ 6 選

PDFMuPDF、pyPDF2、PDFMiner

Spire.PDF

  1. 実家のスキャナーが A4 横書き文書を A4 縦書きにスキャンして、1 ページ 1 PDF ファイルで生成してしまうようです。Adobe Acrobat の有料版では、回転や合併ができるようですが、〇〇〇〇です。よって、Python スクリプトを開発することにしました。

  2. PDF ファイルの全ページを 1 ページづつに分割して、複数の PDF ファイルを作成する Python スクリプトも開発してみました。PDF 回転のスクリプトを流用したら、数分で完成させることができました。→ GitHub リンク

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?