約1/30でも割と見られるPDFに圧縮しておく

そんな訳で、MacBookの中にはPDFがどんどん溜まる。でも、今時2.5インチのHDでも500GBが標準になりつつある。なのに、かなりお買い得な価格。だから今までPDFのサイズには無頓着だった。

ところが、iPhoneiPadをオンラインストレージと連携させて使い始めると、PDFのサイズが気になってきた。オンラインストレージの容量の問題もあるが、一番のストレスは、PDFのサイズが大きいと読み込むまでの時間がかかるのと、スクロールや拡大・縮小・回転などの操作が重くなること。

MacBookにはEPSONのGT-9800スキャナ(古い!)が接続されていて、GT-9800のドライバが2つインストールされている。

  • 一つは、EPSONのページからダウンロードしたGT-9800スキャナドライバ。
  • もう一つは、Appleのソフトウェアアップデートで自動インストールされたGT-9800スキャナドライバ。

どちらを使ってもGT-9800でスキャンできるのは知っているが、同じPDFをスキャンしても、EPSONダウンロード ドライバの方が遥かに小さなPDFになる。

EPSONダウンロード ドライバ(全自動モード) 125KB(124,908) 等倍サンプル
Appleのソフトウェアアップデート ドライバ 4.5MB(4,529,087) 等倍サンプル
  • 4529087÷124908≒36.26

なんと!EPSONダウンロード ドライバ(全自動モード)の方が、Appleのソフトウェアアップデート ドライバより1/36以上小さいのだ!

この違いはどこから来るのか調べてみると...PDFは書類の中に文字情報と供に画像情報も埋め込む。スキャンして生成されたPDFは全てが画像情報である。この画像情報の取り扱いで差が出てくるようだ。

  • スキャン時に指定する解像度による違い。(高解像度=サイズ大、低解像度=サイズ小)
  • 同じ解像度でも、画像の品質による違い。( 高品質=サイズ大、 低品質=サイズ小)

画像比較

等倍
  • 等倍サンプルの画像を見る限り、EPSONダウンロード ドライバ(全自動モード)は、かなりいい線行っている。
  • 色の発色は、EPSONダウンロード ドライバ(全自動モード)の方がむしろ良いくらい。
  • 帯左下の一番小さな文字「原作・脚本・監督...」に続く2行を見て、ようやくAppleのソフトウェアアップデート ドライバの優位性を確認できた。
拡大

iPhoneで最大に拡大してスクリーンショットしてみた。

  • EPSONダウンロード ドライバ(全自動モード)↓

    • なるほど!拡大するとその品質の差が明確になる。
    • 36倍以上サイズが大きいAppleのソフトウェアアップデート ドライバの高品質が引き立つ。
  • Appleのソフトウェアアップデート ドライバ↓


400倍

MacBookのプレビュー.appで400倍に拡大してスクリーンショットしてみた。

  • EPSONダウンロード ドライバ(全自動モード)↓

    • JPEGの品質を下げた時のブロックノイズが出ている。
    • 一方、色合いは素晴らしい。
  • Appleのソフトウェアアップデート ドライバ↓

    • 色合いが今いち。薄ら白いフィルターがかかった感じ。
  • 以上のことから、PDFサイズが小さいと、その分犠牲にしている部分もあるということが分かった。
  • ここで、最初の等倍のサンプルをもう一度見比べてみて欲しい。
  • 等倍で読みにくいのは、帯に書かれたかなり小さな文字の部分だけだ。そこだけは拡大したくなる。
  • でも発想を変えれば、それ以外の部分は等倍でも問題なく読めて、拡大の必要性はあまり感じない。
  • 等倍であれば、両PDFの差はほとんどない。
  • ならば、もし小さな文字さえなければ、EPSONダウンロード ドライバ(全自動モード)による1/36のPDFでも十分ということに気付いた。

PowerPCコードの問題

  • EPSONダウンロード ドライバは、全自動モードではなく、ホームモード・プロフェッショナルモードにすれば、その仕上がりのPDF品質を細かく設定できる。
  • 今後は、EPSONダウンロード ドライバを積極的に使おうと決意したが、実はちょっとした懸念がある。
  • EPSONダウンロード ドライバは、PowerPCコードなのである。


  • だから、裏でRosettaが起動して、PowerPCコードをIntelコードに変換しながら実行しているのである。
  • そのせいか分からないが、よく起動しないことがある。途中で突然終了してしまうこともある。不安定なのだ。
  • MacBookを再起動すれば、調子良くスキャンを続けてくれる。
  • だけど、スキャンの度にMacBookを再起動するのはストレスだ。
  • そんな状況もあって、今までEPSONダウンロード ドライバの調子が悪い時は、Appleのソフトウェアアップデート ドライバを使ってきた。
  • だから、自分のMacBookには富豪的なPDFが大量に眠っている。
  • MacBookでは気にもしないが、Dropbox経由、iPhoneiPadで見るにはちょっと躊躇してしまうサイズのPDFが大量に保存されているのだ。
  • そんな富豪的なPDFを何とかしたい、どうにかできないものか、と常日頃思っていた。

既存のPDFを圧縮する

プレビュー.appで圧縮
  • プレビュー.appでファイルを保存する時に、Quartz フィルタ に Reduce File Type を選択してみた。


  • ファイルサイズは文句なしに小さくなったが、やはり絶対的に解像度が不足している感じ。
  • 「原作・脚本・監督...」に続く2行は、全く判読できない。
  • 等倍サンプルも全体的にぼやけた印象で、文字を読むのが億劫に感じる。

この圧縮ではちょっと使えない。

Automatorで圧縮
  • Automatorのアクションに「PDF書類内のイメージを圧縮」というのがあった。
  • PDFをこのアクションに渡すと、素早く圧縮してくれるのだ!品質も調整可能。
  • 早速、そのアクションを試してみる。
  • 圧縮:JPEG、品質:最低でやってみた。


  • 品質:最低だが、サイズと品質のバランスがとれているかも。
  • 「原作・脚本・監督...」に続く2行も、ボケるけど、ちゃんと読めるレベル。
  • EPSONダウンロード ドライバよりも品質は高い。
  • 等倍サンプルも、圧縮前と遜色なく、じっくり見ないと違いが分からない。

Automatorの「PDF書類内のイメージを圧縮」アクションは、素晴らしい品質でPDFを圧縮することが分かった。

  • しかも、これが最低品質である。
  • 品質を調整すれば、より小さな文字にも対応できそう。

「PDF書類内のイメージを圧縮」の使い方

  • Automatorのメニューで ファイル >> 新規 を選択した。
  • ワークフローのテンプレートを選択:サービスを選択した。
  • 「PDF書類内のイメージを圧縮」アクションをドラッグ&ドロップで並べて完了。
  • ファイルを選択して、アクションを実行すれば、圧縮されたPDFが生成される。
  • そのPDFは、/private/var/folders/7t/7txMamB3F5yDjLEWm5P6ik+++TI/-Tmp-/4CQRO7.pdf に保存された。

  • それにしても一体、どうしてこんな場所に保存されるのだろう?
  • おそらく、決して重複しない一時的なファイルとして保存しておきたいからなのだろう。
  • このアクションが正常に実行されると、上記パスが結果となり、次のアクションへ渡された。
  • 圧縮したPDFの場所だけ教えておくから、あとは好きに使ってね、ということらしい。

元PDFと同じフォルダに移動する

  • 上記のパスは、階層が深くて、意味不明なフォルダ名で扱いにくい。
  • 元PDFと同じフォルダに移動するようにしてみた。


--inputに圧縮されたPDFのエイリアス参照リストが入っている
--original_folderに元PDFのディレクトリ部分の参照が入っている
tell application "Finder"
move input's item i to original_folder
end tell

元PDFと同じファイル名にする

  • ファイル名も意味不明で扱いにくい。
  • 元PDFと同じファイル名に変更してみた。
  • でも、元PDFが同じフォルダに存在すると、同じファイル名は使えない。
  • ならば、元PDFを削除すれば良いのだが、あとで圧縮したPDFと比較したくなるかもしれない。
  • そこで、元ファイルはゴミ箱に移動することにした。
  • もし圧縮結果に満足できなければ、簡単に元の場所に戻せる。
    • ゴミ箱のファイルを選択して、二本指タップでコンテクストメニューを表示、「戻す」を選択すると、直前のフォルダに戻るのだ。
    • 直前の操作にしか効かない「編集 >> 取り消す」と違って、「戻す」はファイルやフォルダが存在する限り可能なところがいい。


--inputに圧縮されたPDFエイリアス参照リストが入っている
--original_pdfsに元PDFエイリアス参照リストが入っている
tell application "Finder"
set input's item i's name to original_pdfs's item i's name
delete original_pdfs's item i
move input's item i to original_folder
end tell

これで元PDFと同じファイル名で圧縮されるようになった!

元PDFと同じ作成日時・更新日時にする

  • いい気になってファイルサイズが大きいものから順にいくつか圧縮していると、ある問題に気付いた。
  • 圧縮後の作成日時・変更日時がすべて現在の日時になってしまっている...。
  • 圧縮されたPDFを「今」作っているのだから当然の結果なのだけど、作成日時・変更日時も検索する時の重要なキーになる。
  • それらがすべて同じ日付、ほとんど同じ時間になってしまうのは、とっても困る...。
  • できることなら、いやどうしても元PDFと同じ作成日時・更新日時にしておきたい。
  • こんな時こそ、前回調べたファイル情報を改竄する知識が役に立つ。
  • 改竄とは響きが悪いが、その目的は作成日時・更新日時をコピーして、検索キーとして活用するため。極めて健全なのである。


--r_pathのファイル属性情報を、f_pathへコピーする
-- 但し、作成日時はコピーされず
on touch_r(r_path, f_path)
"touch -r " & r_path's POSIX path's quoted form & " " & f_path's POSIX path's quoted form
do shell script result
end touch_r

--r_pathの作成日時と変更日時を、f_pathへコピーする
-- 作成日時がコピーされないtouch_rを補うため
-- 変更日時は余分だが、今後の再利用のため残す
on setfile_created_modified(r_path, f_path)
"getfileinfo " & r_path's POSIX path's quoted form & "| grep -e 'created:'|cut -d' ' -f2-"
set created_at to do shell script result
"getfileinfo " & r_path's POSIX path's quoted form & "| grep -e 'modified:'|cut -d' ' -f2-"
set updated_at to do shell script result

"setfile" & " -d " & created_at's quoted form & ¬
" -m " & updated_at's quoted form & ¬
" " & f_path's POSIX path's quoted form
do shell script result
end setfile_created_modified

これで元PDFとまったく同じ作成日時・更新日時となった!

元PDFと同じアクセス権限にする

  • あともう一つ、元PDFとの気になる違いがある。それは、アクセス権限。
ホーム内の一般的なPDFの権限 Automatorが圧縮したPDFの権限
オーナー: 読み/書き 読み/書き
グループ: 読み アクセス不可
全ユーザ: 読み アクセス不可
  • 自分自身はどちらも 読み/書き できるので問題ないが、共有した時に自分以外の人が開けないPDFでは困る。
  • 元PDFと同じ権限にしておくことにした。


--r_pathのアクセス権限を、f_pathへコピーする
on copy_permission(r_path, f_path)
tell application "Finder"
{owner privileges:(r_path as alias)'s owner privileges ¬
, group privileges:(r_path as alias)'s group privileges ¬
, everyones privileges:(r_path as alias)'s everyones privileges}
set (f_path as alias)'s properties to result
end tell
end copy_permission

これで元PDFと同じアクセス権限になった!

圧縮したPDFに置き換えるスクリプト(まとめ)

  • 以上のAppleScriptコードをまとめると、圧縮したPDFに置き換えるスクリプトとなる。(元PDFはゴミ箱へ移動)


on run {input, parameters}

(* Your script goes here *)
tell application "Finder"
--PDFエイリアスのリストと、フォルダを保存しておく
set original_pdfs to {}
repeat with pdf in selection as list
set original_pdfs's end to pdf as alias
end repeat
set original_folder to pdf's folder as alias

repeat with i from 1 to input's length
--PDFのファイル属性情報を、圧縮されたPDFにコピーする
my touch_r(original_pdfs's item i as text, input's item i as text)
my setfile_created_modified(original_pdfs's item i as text, input's item i as text)
my copy_permission(original_pdfs's item i as text, input's item i as text)

--圧縮されたPDFに置き換える(元PDFはゴミ箱に移動)
set input's item i's name to original_pdfs's item i's name
delete original_pdfs's item i
move input's item i to original_folder
end repeat
end tell

--return input
end run

--r_pathのファイル属性情報を、f_pathへコピーする
-- 但し、作成日時はコピーされず
on touch_r(r_path, f_path)
"touch -r " & r_path's POSIX path's quoted form & " " & f_path's POSIX path's quoted form
do shell script result
end touch_r

--r_pathの作成日時と変更日時を、f_pathへコピーする
-- 作成日時がコピーされないtouch_rを補うため
-- 変更日時は余分だが、今後の再利用のため残す
on setfile_created_modified(r_path, f_path)
"getfileinfo " & r_path's POSIX path's quoted form & "| grep -e 'created:'|cut -d' ' -f2-"
set created_at to do shell script result
"getfileinfo " & r_path's POSIX path's quoted form & "| grep -e 'modified:'|cut -d' ' -f2-"
set updated_at to do shell script result

"setfile" & " -d " & created_at's quoted form & ¬
" -m " & updated_at's quoted form & ¬
" " & f_path's POSIX path's quoted form
do shell script result
end setfile_created_modified

--r_pathのアクセス権限を、f_pathへコピーする
on copy_permission(r_path, f_path)
tell application "Finder"
{owner privileges:(r_path as alias)'s owner privileges ¬
, group privileges:(r_path as alias)'s group privileges ¬
, everyones privileges:(r_path as alias)'s everyones privileges}
set (f_path as alias)'s properties to result
end tell
end copy_permission

  • 上記AppleScriptコードを「PDF書類内のイメージを圧縮」アクションに続けることで、元PDFがその場で1/30に圧縮されるようなサービスの出来上がり。

>> PDFを圧縮 サービスをダウンロードする

品質とサイズ

  • フルカラー、200dpiでscanしてみた。

  • 品質を変えて圧縮した時に、サイズと画質にどのように影響するか?
  • 高 =標準と最高の間
  • 低 =標準と最低の間
  • 標低=標準と低の間(目盛りはないけど、目測で)


元PDF 4.5MB(4,532,311バイト)
最高 3MB(2,974,207バイト)1/1.5
高 659KB(659,284バイト)1/6
標準 366KB(365,924バイト)1/12
標低 262KB(262,173バイト)1/17
低 192KB(191,676バイト)1/23
最低 156KB(156,163バイト)1/29

  • ちなみに、「原作・脚本・監督...」部分の文字サイズは2mm四方でかなり小さい部類。
  • 一般的な文庫本の活字サイズなら、品質 = 最低でも十分快適に読める。
  • もし品質にこだわるなら、標準と低の間に、品質とサイズがバランスするポイントがあると感じた。

所感

  • iPhoneiPadでの閲覧がすこぶる快適。
  • だって4、5MBで読み込むまでにひと苦労だったPDFが、数百KBになってほとんど一息で読み込み完了。


これで、自分のMacBookに眠る富豪的なPDFを一気に約1/30に圧縮できた!

  • ちなみに、ScanSnap等スキャナの付属ドライバで最初から最適化されたPDFは、いくら圧縮処理してもそれほどサイズは小さくならないと思う。

効果

最近は、できる限りの書類をPDFにすることを心掛けている。納品書、請求書、配送伝票、保険証書、車検証、葉書、クレジット明細、電気・ガスの明細、レシート等々。今までだったら一定期間保存したら捨てる、あるいはかなり長期間保存していて、たぶん探せばどこかにあるけど、とても探す気にはなれない状態だった。そんな書類が、多少真面目に検索すれば、(PDFとして)すぐ見つかる状態になった。

すると、今までだったら見過ごしていたり諦めていた問題が、かなり前向きに解決するようになってきた。例として...

  • ここ数年、ガス料金が結構高いと感じていた。そこで、過去数年の毎月の料金をガス供給会社に見せて交渉したら、あっさり値下げしてくれた。(言ってみるもんだ、と思った)また、ガスメーターの読み違いで高額な請求になっていることにも気付くようになった。
    • ちなみに、ちゃんと家計簿をつける習慣があれば、PDF化するまでもなく、対応できることだと思う。
  • この前載せ替えた内蔵ハードディスクが1年もしないうちにが壊れてしまった。以前だったら初期不良10日前後のみ無償補償で、それ以降は運が悪かったと諦めるしかないと思っていたが、最近のハードディスクは補償が充実している。なんと、1年補償、中には3年補償までしてくれるのだ!(念のためと、ショップのページで確認して気付いた)しかし、そのためにはハードディスクと「納品書」を添付して発送する必要があるそうだ。探してみたが現物の「納品書」は見つからなかった...。しかし、PDFの「納品書」はすぐ見つかった。PDFを印刷した納品書を添付して、無事、新品のハードディスク交換となった。
    • ちなみに、最悪PDFの納品書がなかったとしても、メールや配送伝票からも購入日は確定できるはずなので、交渉次第で補償対応に導ける事柄だと思う。

どちらの事柄も、PDF化が必須ではないが、PDF化しておいたことで苦労最小限で対応することが出来たと思っている。(その分、PDF化する手間はかかっている訳だが)