PDFファイルの表示の向きを回転して保存する

Excelに並んでビジネスシーンで幅をきかせているファイルフォーマットはPDFです。皆さん、PDF資料あるあるとして「ちょっ、なんでそれをその向きでよこした・・・」という縦横逆転超絶読みずら資料に遭遇したことがあるでしょう。

99%の人はAcrobat ReaderでPDFファイルを開いていると思います。このアプリでは回転ボタンで表示の向きを変えることはできますが、その状態を保存できません。次に開いたらまた回転ボタンを押さなければまともに読めません。なんというクソ仕様。

解決策として、インターネッツにPDFファイルの向きを変えてくれる無料のAPIサービスがありますが、どこの馬の骨が運営しているかわからないサーバーに社内の資料をアップロードしたくないですよね。

数あるPDF系ユーティリティソフトも、統合や分割はできても回転ができるものが見当たりません。なぜでしょう。じゃあ自分でやろう、ということでPythonならできないわけないと思って調べたらできました。超簡単です。たぶんAPIでも裏でこれを走らせているんじゃないかな。

アプリでさくっとやりたいんだよという方はここまで読み飛ばしてください。

pypdfでPDFファイルを回転保存

pypdfモジュールを使用します。インストールしましょう。

pip install pypdf

ソースコードです。

import os
import sys
from pypdf import PdfWriter, PdfReader

fp = sys.argv[1]
reader = PdfReader(fp)
writer = PdfWriter()

for page in reader.pages:
    page.rotate(90)
    writer.add_page(page)

fn = os.path.basename(fp)
cd = os.path.dirname(fp)
rd = os.path.join(cd, '回転したPDF')

if not os.path.exists(rd):
    os.mkdir(rd)

rfp = os.path.join(rd, fn)
with open(rfp, 'wb') as out:
    writer.write(out)

公式のドキュメントにサンプルがあったので、それを少し書き換えただけです。pypdf._page.PageObjectrotateメソッドでページを回転できます。引数で時計方向の回転角度をとります。(90)で→方向に90°回転します。270を与えれば←に90°回転となります。レアケースとは思いますが上下が逆ならば、まずそれを作成したやつを小一時間問い詰めたのちに180に指定すればよいです。90で割れない数値はエラーとなります。

使用方法

Python実行環境が必要です。pypdfモジュールが必要です。

1.ソースコードをテキストエディターなどにコピペします。必要に応じて回転角度を書き換えます。90と270の2パターン作っておくと便利でしょう。

2.拡張子.pyのファイルとして保存します。

3.回転させたいPDFファイルを2.のファイルへドラッグ&ドロップします。

4.PDFと同じフォルダに「回転したPDF」というフォルダができて、その中に回転したPDFが保存されています。

アプリで回転保存

Python実行環境がない方のために、PyInstallerでアプリ(実行ファイル)にしたものを配布します。どこの馬の骨問題が再燃しますが、信用していただけるならご利用ください。使用方法は対象のPDFファイルをアプリアイコンにドラッグ&ドロップするだけです。

直球の.exeファイルなので、実行前にWindowsにいったんストップされ「おぃ?本当にいいのか?オレ責任とらねーぞ?」と言われます。自己責任で忠告を無視してください。

PyInstallerを使うと容量を食うので、個人的にはあまり好きではありませんし、この方法を常用するのはオススメはしません。これを機会にPython実行環境の導入をご検討ください。当WEBサイトの他のスクリプトも簡単に利用できるようになります。

アプリを入手する

利用上のご注意

  • ダウンロードしたファイルを利用したことにより生じた結果については、利用者ご自身に責任を負っていただきます。
  • ご利用前に使用方法をご確認ください。
  • 当方は成果物の正確性について最善を尽くしますが保証はいたしません。
  • Windows11 Microsoft365 でのみ動作確認済み。

Downloadボタンを押下した時点で注意事項に同意したものとみなします。

pdf_rotate.zip

まとめ

主に紙→PDFに変換する段階で、トンチキPDFが生成されるわけですが、紙資料が淘汰されるのはまだ先でしょうから、Adobeがクソ仕様を改めて公式に回転保存を実装するまでは、これでしのぐことにします。

おわり。