[Python] PDFファイルを結合したり分割したりしてみる
こんにちは、@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()
@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]