はきだめ

UnityやRailsに関するメモを残します。

コマンドラインでPDFにかかった鍵をサクッと外す

はじめに

鍵のかかったPDFは毎回パスワードを打つ必要がありとても面倒です。Chromeで開いて「ファイル」→「印刷」→ 「PDFとして保存」というやり方でも鍵を外せますが、どうせならコマンドでサクッとPDFの鍵を外せないかと思い調べたところPDFtkというものを使うとコマンドラインで鍵を外せるみたいなのでメモしておきます。

PDFtkの導入

せっかくなのでbrewで入れました。本家にいってダウンロードしてインストールするのももちろん可能です。

brew search PDFtk Server
==> Searching local taps...
==> Searching taps on GitHub...
==> Searching blacklisted, migrated and deleted formulae...
No formula found for "PDFtk".
Closed pull requests:
pdftk 2.02 (new formula) (https://github.com/Homebrew/homebrew-binary/pull/344)
pdftk: 2.02 - a Handy Tool for Manipulating PDF Documents (https://github.com/Homebrew/homebrew-binary/pull/57)
pdftk: 2.02 - a Handy Tool for Manipulating PDF Documents (https://github.com/Homebrew/legacy-homebrew/pull/25953)

プルリクはあるみたいなので、それを使うことにしました。3つありますが、下の2つはbrew pull出来ませんでした。

brew pull https://github.com/Homebrew/homebrew-binary/pull/344
==> Tapping homebrew/binary
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-binary'...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 4 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.
Tapped 0 formulae (30 files, 23.2KB)
==> Fetching patch
Patch: https://github.com/Homebrew/homebrew-binary/pull/344.patch
######################################################################## 100.0%
==> Applying patch
Applying: pdftk 2.02 (new formula)
==> Patch closes issue #344
==> Patch changed:
 pdftk.rb | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
brew install pdftk

無事入ったみたいです。

使い方

鍵を外す
pdftk input.pdf input_pw password output output.pdf
鍵をかける
//パスワードはhoge
pdftk input.pdf output output.pdf user_pw hoge
全てのpdfファイルの鍵を外す(同じパスワードのときのみ)

一個ずつコマンドを打ち込むのも面倒くさいと感じたので同じ階層にあるPDFの鍵を一斉に外すクソスクリプトを書いてみました。幸いにも私が履修している科目で配布されるPDF資料は全て同じパスワードなのでこのクソスクリプトで事足りそうです。

#!/bin/sh

echo "パスワードを入力してください"
read password
for file in *.pdf; do
  if [[ ! ${file} =~ unlocked ]]; then
    pdftk ${file} input_pw ${password} output ${file}_unlocked.pdf
  fi
done

読み込むPDFの名前と吐き出すときのPDFの名前を同じにすることが出来ないみたいなので末尾にunlockedを付けて吐き出すようにしました。条件分岐で鍵を外したPDFファイル(◯unlocked)以外のPDFファイルの鍵を外すようにしています。今後はこのクソスクリプトが置いてあるフォルダに鍵付きのPDFを置いてサクサク鍵を外そうかなぁと思ってます。

おわりに

このPDFtkは「鍵を外す」「鍵を掛ける」こと以外にもPDF同士を連結させたり、特定のページを抽出することなども出来るみたいです。

https://www.pdflabs.com/docs/pdftk-cli-examples/