PythonでPDFファイルのページを回転してみた

PyPDF2を使って、PDFファイルのページを回転してみました。

目次

  1. 回転の手順
  2. 使用するクラスとメソッド
  3. ページ回転の実施例

回転の手順

PyPDF2モジュールを使ってPDFファイルの中のページを回転してみます。手順は概ね下記のようになります。

  1. PdfFileReaderでPDFファイルを読み込む
  2. 回転したいページをgetPageメソッドで抜き出す
  3. rotateClockwizeまたはrotateCounderClockwizeメソッドでページオブジェクトを回転する
  4. PdfFileWriterオブジェクトを作る
  5. PdfFileWriterオブジェクトに、回転したページオブジェクトを追加する
  6. writeメソッドで書き出す

使用するクラスとメソッド

PdfFileReaderクラス

reader = PyPDF2.PdfFileReader(stream, [strict], [warndest], [overwriteWarnings])
名前 内容
stream   PDFファイルのパスを示す文字列、またはreadとseekに対応したオブジェクト。
strict bool 省略可。既定値はTrue。PDFファイルを読み取ったときの警告を表示するかどうか。
warndest   省略可。既定値はsys.stderr。警告の出力先。
overwriteWarnings bool 省略可。既定値はTrue。
reader   PdfFileReaderオブジェクト。

PdfFileReaderオブジェクトを作成します。

getNumPagesメソッド

n = reader.getNumPages()
名前 内容
reader   ページ数を調べたいPdfFileReaderオブジェクト。
n int PdfFileReaderオブジェクトのページ数。

PdfFileReaderオブジェクトのページ数を計算するメソッドです。引数はありません。

getPageメソッド

page = reader.getPage(pageNumber)
名前 内容
reader   ページを取得したいPdfFileReaderオブジェクト。
pageNumber int 取得したいページのページ番号。1ページ目を0とする。
page PageObject 取得したページオブジェクト。

PdfFileReaderオブジェクトから、指定したページを取得します。

rotateClockwizeメソッドとrotateCounterClockwizeメソッド

page.rorateCloclwize(angle)
page.rorateCounterCloclwize(angle)
名前 内容
page PageObject 回転したいページオブジェクト。
angle int 回転角度。90度刻みで指定する。

ページオブジェクトを回転するメソッドです。Clockwizeが時計回り、CounterClockwizeが反時計回りです。角度は90度刻みで指定します。

PdfFileWriterクラス

writer = PyPDF2.PdfFileWriter()
名前 内容
writer   PdfFileWriterオブジェクト。

PdfFileWiterクラスは、ページオブジェクトをPDFファイルに書き込むためのクラスです。

addPageメソッド

writer.addPage(PageObject)
名前 内容
writer   PdfFileWriterオブジェクト。
PageObject PageObject writerオブジェクトに追加するページオブジェクト。

PdfFileWiterオブジェクトにPageObjectを追加するメソッドです。

writeメソッド

writer.write(stream)
名前 内容
writer   PdfFileWriterオブジェクト。
stream   ファイルオブジェクト、またはwriteとtellに対応したオブジェクト。

ファイルオブジェクトに書き込みをします。withおよびopenと共に使うのが良いでしょう。

ページ回転の実施例

夏目先生の「こころ」のテキストを、ワードパッドに貼り付けて、PDFに出力したファイルがあります。

回転前

このPDFファイルの1ページ目を90度回転してみます。

import PyPDF2

reader = PyPDF2.PdfFileReader('kokoro.pdf', strict=False)

page = reader.getPage(0)
page.rotateClockwise(90)

writer = PyPDF2.PdfFileWriter()
writer.addPage(page)

for i in range(1, reader.getNumPages()):
    writer.addPage(reader.getPage(i))

with open('out.pdf', mode='wb') as f:
    writer.write(f)

1ページ目を回転するので、readerからページ0を抜き出してrotateClockwizeで回転しました。

回転しないページは、forループを使って1ページずつreaderからgetPageしてwriterにaddPageします。

できあがったファイルはこんな感じです。最初のページだけ回転しました。

回転後

広告

PythonとPDFカテゴリの投稿