はじめに
自分の論文の読み方は少し特殊.
まず,A4に片面印刷した後にすべてのページを逆さまにして閉じる.
つまり,左側が論文ページ,右側が白紙(次ページの裏面)になるような冊子を作る.
そして,右側ページの白紙余白部分に落書きしながら,論文を読み進めている.
こんな感じ.(汚いけど許して.)
で,いずれはこの作業はすべて電子化したいと考えている.
こんなのを使って.今は持ってないけど....
そうすると,論文に1ページおきに白紙pdfが挟まったファイルがあると嬉しい.
ということで,捕らぬ狸の皮算用感はあるが,今回は「pdfファイルの連結」をPythonで実装してみた記録.
使用するパッケージ
「Python pdf 編集」などでググると,さまざまな記事がでてくる.がその多くは,テキストマイニングの実装を目的としている感じで少し困った.
実装したいのはpdfファイル自体の結合.そこで今回はPyPDF2
というパッケージを使った.
公式サイトHome page for the PyPDF2 projectに,他のpdf関連パッケージとの違いが述べられている.
2とか付いているからPython3は非対応?と思ったけど,そんなことはなかった.
参考にしたページ
- PDFファイルをpythonで扱いたい【最終:複数のファイルを結合する】
- GitHub – conda-forge/pypdf2-feedstock: A conda-smithy repository for pypdf2.
- Home page for the PyPDF2 project
実装
今回は論文ではなく,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の実行結果をそのまま.
import PyPDF2
#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)
#numPagesメソッドはページ数を取得できる
report_obj.numPages
#表紙として白紙を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))
#出力
pdf_output = open('output.pdf', 'wb')
pdf_writer.write(pdf_output)
pdf_output.close()
おしまい
おわりに
簡単すぎる.いろいろと遊べそうなので楽しみ.
論文の読み方の最適化については検討中.
自動要約とまではいかなくても,「in this study」のハイライトとかは実装してみたい.
3