こんにちは!
しがない雑食系クリエイターのはまやん(@hama_paz)です!
本業の方で紙の書類を電子化しようという事で、ここ最近スキャンされたPDFデータを
加工している業務に日々追われています。
で、スキャンされたPDFを見てみると1ページ目は正方向なのですが、2ページ目が逆向きで
スキャンされていました。
自分でスキャンしているのならばまだしも、別の人がスキャンした場合は割とよくある事かなと
思います。
まぁ1ファイルぐらいならAcrobatDCで編集すればいいんですが、それが1000以上のファイル数
だったら…?
そこで最近ブログ開設と共に、スキルアップのために勉強しはじめていたプログラミング言語の
Pythonを使用して、複数のPDFファイルの特定ページのみ回転させるコードを無い頭ひねりながら
無事作成できましたのでご紹介します!
こんにちは! しがない雑食系クリエイターのはまやん(@hama_paz)です! デザイナーの皆さん、作業が一段落ついた時にフォルダを開けてみるとファイル名がグッチャグチャになっている事はありませんか? 最初からファイル[…]
PythonでPDFを編集する方法
Pythonやプログラミング言語の説明については当記事では割愛します。
何故ならここに辿り着いた方は「そんな事はどうでもいいからソースコードはよ!」って思う方がほとんどだからです。
実際にネットを漁っている時の僕がそうでした。
ただ一応Pythonのインストール方法から解説していきます。
- Pythonをインストール
- ソースコードをコピペして.pyファイルを作成
- 実行
Pythonをインストール
まずはPythonの開発環境を用意しないと実行もできませんのでインストールします。
インストールはこちらからインストールします。
「Download」タブから使用するPCのOSに応じてダウンロードします。
Pythonは様々なバージョンがありますが、バージョンによって関数が使えるものが異なりますので
今回は3.8.3のバージョンを選んでいます。
ダウンロードできたらインストールして環境の構築は完了です!
ソースコードをコピペして.pyファイルを作成
インストールができたらPythonの「IDLE」を開きます。
Cmd+N(Mac)、Ctrl+N(Win)を押して新規でファイルを作成します。
ここに下記のソースコードをコピペします。
import os import glob from PyPDF2 import PdfFileWriter, PdfFileReader def rotate_pages(files): pdf_file_writer = PdfFileWriter() pdf_file_reader = PdfFileReader(files) # 1ページ目を読み込み、そのまま追加 pdf_file_writer.addPage(pdf_file_reader.getPage(0)) # 2ページ目を読み込み、左に90度回転したページを取得 page_2 = pdf_file_reader.getPage(1).rotateCounterClockwise(180) # 回転した2ページ目をページ追加 pdf_file_writer.addPage(page_2) # PDFの出力 with open(files, 'wb') as f: pdf_file_writer.write(f) # ('C:/Users/*')の部分にファイルのディレクトリを指定して実行 for pdf_file in glob.glob('C:/Users/*'): rotate_pages(pdf_file)
コピペして保存します。
スクリプトの実行
保存が出来たら、「Run」タブの「Run Module」を選択してスクリプトを実行します。
これでPDFページの2ページ目が回転してたらOKです!
補足説明
上のソースコードでは2ページ目を180度回転させるコードですが、
もちろん1ページ目を回転させたりする事も可能です。
page_2 = pdf_file_reader.getPage(1).rotateCounterClockwise(180)
この部分で「2ページ目を取得して180度回転させる」って指示しているので、例えば1ページ目を回転させるのであれば
pdf_file_reader.getPage(1)の数字を0にすれば1ページ目を取得します。
※Pythonでは0からスタートします。
90度回転させたい場合はrotateCounterClockwise(180)の180を90にすればOKです!
(‘C:/Users/*’)の部分に実際に変えたいPDFファイルがあるディレクトリを入力します。
for pdf_file in glob.glob('C:/Users/*'):
上のソースコードではサンプルのディレクトリを記述しているのでこのまま実行するとそんなディレクトリねえぞ!
ってエラーが出ます。
注意点
僕自身がプログラミング超素人なのでおそらく方法はあるかと思いますが、上記のソースコードでは3ページ以上あると、
そのページ以降を取得していないのでエラーが出ます。
現状3ページ以降取得できるように書き直すか、数が少なければAcrobatDCで編集しています。
もう少し勉強して複数ページのページ数関係なく取得できるように頑張ります!(願望)
おわりに
いかがでしたか?
クリエイターに限らず、世の会社で縁の下の力持ちで頑張ってくださっている経理や総務の皆さん!
請求書のPDFデータがこんな状況だったら胃が痛くなりませんか?
こちらのコードを使ってぜひ効率化を測ってみてください!