Pythonでpdfファイルの結合 (PyPDF2)

はじめに

自分の論文の読み方は少し特殊.

まず,A4に片面印刷した後にすべてのページを逆さまにして閉じる.

つまり,左側が論文ページ,右側が白紙(次ページの裏面)になるような冊子を作る.

そして,右側ページの白紙余白部分に落書きしながら,論文を読み進めている.

 

こんな感じ.(汚いけど許して.)

 

 

で,いずれはこの作業はすべて電子化したいと考えている.

 

 

こんなのを使って.今は持ってないけど....

 

そうすると,論文に1ページおきに白紙pdfが挟まったファイルがあると嬉しい.

 

ということで,捕らぬ狸の皮算用感はあるが,今回は「pdfファイルの連結」をPythonで実装してみた記録.

 

 

使用するパッケージ

 

「Python pdf 編集」などでググると,さまざまな記事がでてくる.がその多くは,テキストマイニングの実装を目的としている感じで少し困った.

 

実装したいのはpdfファイル自体の結合.そこで今回はPyPDF2というパッケージを使った.

公式サイトHome page for the PyPDF2 projectに,他のpdf関連パッケージとの違いが述べられている.

 

2とか付いているからPython3は非対応?と思ったけど,そんなことはなかった.

 

参考にしたページ

 

実装

 

今回は論文ではなく,PEP8ドキュメントpep8.pdfに1ページごとに白紙(brank.pdf)を挟むことを考える.

 

PEP8については,PEP8を読む(導入) – Takala’s Memory を見てね.

 

パッケージのinstall.

Anacondaユーザーはcondaでパッケージ管理するのが善.


conda install -c conda-forge pypdf2

pip派の人々は,


pip install pypdf2

コード

notebookの実行結果をそのまま.

 

In [1]:
import PyPDF2
In [2]:
#pdfファイルのパス
report_path = "pep8.pdf"

#白紙のpdfファイル
white_page_path = "blank.pdf"

#出力用のPyPDF2オブジェクト
pdf_writer = PyPDF2.PdfFileWriter()

#ファイルオープン
f_report = open(report_path, "rb")
#PyPDF2.PdfFileReaderに噛ませる
report_obj = PyPDF2.PdfFileReader(f_report)

#白紙pdfも同様に
f_white_page = open(white_page_path, "rb")
white_page_obj = PyPDF2.PdfFileReader(f_white_page)
In [3]:
#numPagesメソッドはページ数を取得できる
report_obj.numPages
Out[3]:
39
In [4]:
#表紙として白紙をadd
#getPageでページ数を指定できる.0はじまりなので注意
pdf_writer.addPage(white_page_obj.getPage(0))

#交互にpdf_writerにページを追加していく
for page_num in range(report_obj.numPages):
    page_obj = report_obj.getPage(page_num)
    pdf_writer.addPage(page_obj)
    pdf_writer.addPage(white_page_obj.getPage(0))
In [5]:
#出力
pdf_output = open('output.pdf', 'wb')
pdf_writer.write(pdf_output)
pdf_output.close()

 

おしまい

 

おわりに

 

簡単すぎる.いろいろと遊べそうなので楽しみ.

論文の読み方の最適化については検討中.

自動要約とまではいかなくても,「in this study」のハイライトとかは実装してみたい.

3