[Python] PDFファイルを結合したり分割したりしてみる

in SCT.암호화폐.Crypto4 years ago (edited)

こんにちは、@yasuです。

今回はPDFファイルを結合および分割してみます。

実行環境

  • https://repl.it/ ではなく Visual Studio Codeで行います。
  • PyPDF2ライブラリ使用
  • PDFファイルを準備

コード

import PyPDF2

# 
# 複数のPDFファイル全体(全ページ)を単純に順番に連結する
# 
# 参考サイト
# https://note.nkmk.me/python-pypdf2-pdf-merge-insert-split/
def Union():
    merger = PyPDF2.PdfFileMerger()

    # 追加するPDFのファイルパスを指定する。
    merger.append('./pdf/abc.pdf')
    merger.append('./pdf/abc.pdf')

    # 出力するPDFのファイルパスを指定する。
    merger.write('./pdf/abcabc.pdf')
    merger.close()

# 
# ファイルの途中に別のファイルを挿入する場合はmerge()メソッドを使う。
# 第一引数positionに挿入するページ番号を0始まりで指定する。
# 
def merge():
    merger = PyPDF2.PdfFileMerger()

    # 追加するPDFのファイルパスを指定する。
    merger.append('./pdf/abc.pdf')
    merger.append('./pdf/111.pdf')

    # 挿入するPDFのファイルパスを指定する。
    merger.merge(1, './pdf/222.pdf')

    # 出力するPDFのファイルパスを指定する。
    merger.write('./pdf/abc.222.111.pdf')
    merger.close()

# 
# ページを抽出して結合
# 
def merge2():
    merger = PyPDF2.PdfFileMerger()

    # 追加するPDFのファイルパスと、ページを指定する。
    merger.append('./pdf/abc.222.111.pdf', pages=(0, 0+1))#1ページ目
    merger.append('./pdf/abc.222.111.pdf', pages=(2, 2+1))#3ページ目
    merger.append('./pdf/abc.222.111.pdf', pages=(1, 1+1))#2ページ目

    # 出力するPDFのファイルパスを指定する。
    merger.write('./pdf/abc.111.222.pdf')
    merger.close()

# 
# 指定したページで分割(PdfFileMerger使用)
# 
def split():
     merger = PyPDF2.PdfFileMerger()
    merger.append('./pdf/abc.111.222.pdf', 
        pages=PyPDF2.pagerange.PageRange('1:2'))
    merger.write('./pdf/111_split.pdf')
    merger.close()

    merger = PyPDF2.PdfFileMerger()
    merger.append('./pdf/abc.111.222.pdf', 
        pages=PyPDF2.pagerange.PageRange('2:3'))
    merger.write('./pdf/222_split.pdf')
    merger.close()


# 
# 指定したページで分割(PdfFileReaderとPdfFileWriter使用)
# 
def split2():
    split_pdf_pages('./pdf/abc.111.222.pdf', './pdf/sss')

def split_pdf_pages(src_path, dst_basepath):
    src_pdf = PyPDF2.PdfFileReader(src_path)
    for i in range(src_pdf.numPages):#ページ毎
        dst_pdf = PyPDF2.PdfFileWriter()
        dst_pdf.addPage(src_pdf.getPage(i))
        with open('{}_{}.pdf'.format(dst_basepath, i), 'wb') as f:
            dst_pdf.write(f)

split2()
Sort:  

@yasu transfered 0.5 KRWP to @krwp.burn. voting percent : 6.33%, voting power : 63.94%, steem power : 1928193.58, STU KRW : 1200.
@yasu staking status : 250 KRWP
@yasu limit for KRWP voting service : 0.5 KRWP (rate : 0.002)
What you sent : 0.5 KRWP [47344697 - 131a943bd36169b0671daceb8213f4abd22fd4b6]

Coin Marketplace

STEEM 0.21
TRX 0.20
JST 0.033
BTC 97050.26
ETH 3143.93
USDT 1.00
SBD 2.97