サイトアイコン Shota Yamane.com

PDF ファイルの連結 with Python3

背景

ScanSnap で書籍を自炊していたが、
補充ミスでPDF ファイルが分割されてしまうことがあった。

それらの分割されたファイルを1つにまとめたい。

コード

import PyPDF2
pdf1_file = open(‘夜間飛行.pdf’, ‘rb’)
pdf2_file = open(‘夜間飛行2.pdf’, ‘rb’)
pdfa_reader = PyPDF2.PdfFileReader(pdf1_file)
pdfb_reader = PyPDF2.PdfFileReader(pdf2_file)
pdf_writer = PyPDF2.PdfFileWriter()
for page_num in range(pdfa_reader.numPages):
page_obj = pdfa_reader.getPage(page_num)
pdf_writer.addPage(page_obj)

for page_num in range(pdfb_reader.numPages):
page_obj = pdfb_reader.getPage(page_num)
pdf_writer.addPage(page_obj)

pdf_output_file = open(‘夜間飛行3.pdf’, ‘wb’)
pdf_writer.write(pdf_output_file)
pdf_output_file.close()
pdf1_file.close()
pdf2_file.close()

出力結果

無事に2つに別れてしまっていたファイルを1つにまとめることができました。

WD を眺めながら作業を行なっていたら、
 pdf_writer.write(pdf_output_file)
を入力時にファイルが作成されたものの、
この段階では空のファイルであり、
 pdf_output_file.close()
を入力した際にデータが書き込まれたのが面白かった。

pdfa_readerpdfb_reader については、本来は
pdf1_readerpdf2_reader になるはずだったが Typo。

見やすくすると以下の様になるかと思います。

import PyPDF2

file1 = open(‘hoge.pdf’, ‘rb’)
file2 = open(‘hoge2.pdf’, ‘rb’)
pdf1_reader = PyPDF2.PdfFileReader(file1)
pdf2_reader = PyPDF2.PdfFileReader(file2)
pdf_writer = PyPDF2.PdfFileWriter()

for page_num in range(pdf1_reader.numPages):
page_obj = pdf1_reader.getPage(page_num)
pdf_writer.addPage(page_obj)

for page_num in range(pdf2_reader.numPages):
page_obj = pdf2_reader.getPage(page_num)
pdf_writer.addPage(page_obj)

pdf_output_file = open(‘hoge3.pdf’, ‘wb’)
pdf_writer.write(pdf_output_file)
pdf_output_file.close()
file1.close()
file2.close()

その他

ScanSnap で PDF ではなく JPEG として保蔵されているものがありました。
それのファイル変換は、オンラインサービスを使ったほうが良さそう。

https://jpg2pdf.com/ja/

モバイルバージョンを終了