トップ «前日 最新 翌日» 編集
RSS feed

ただのにっき


2011-03-30(水) [長年日記]

「オライリーのebookから空白を除去……」に関する補遺(2) : バイナリパッチによる空白の除去

先日のPDFの空白除去の話にはいくつか興味深い反応があって、(あえてリンクはしないけど)DRMそのものを外してしまう方法がまずあった。実はそれは以前から知っていて、いくつかのPDFビューア(特にオープンソースのもの)ではそもそもDRMを無視してファイルを開くし、その他にもDRM破りのツールはいくつもある。DRMさえ外せれば、たとえばPDF Scissorsなどを使えばインタラクティブに空白を除去できる。興味があれば調べてみるといいだろう。

ただ、自分はDRM破りは最後の手段だと考えているので、他に手があるうちはそっちを選ぶ。DRM破りはいつか違法になるかも知れないし(もうなってるんだっけ?)、それよりも最初からDRMのかかっていない品物が入手できる世の中になるように活動した方がいいと思う*1。ま、このへんは人それぞれで。

一方、面白い手法の紹介もあった。わいえむねっと - 2011/03/30で紹介されているのは、PDFファイルの「CropBox」指定を直接書き換える方法。バイナリパッチだ! これはいいな(笑)。Perlだと何やってるのかすぐに理解できなかったので、ロジックそのままにRuby(もちろん1.9)で書きなおした(写経?):

# left, bottom, right, top
OFFSET = [47, 45, -47, -62]

print( ARGF.read.force_encoding( 'ASCII-8BIT' ).gsub( %r|(/CropBox\s*\[\s*([^\[]+?)\])| ) do
   orig, box = $1, $2
   offset = OFFSET.dup
   crop = "/CropBox[#{box.split( /\s+/ ).map{|s| s.to_i + offset.shift}.join(' ')}]"
   blank = orig.length - crop.length
   blank > 0 ? crop + ' ' * blank : orig
end )

「セキュリティの神話」を上記のOFFSET値で処理したのが下のスクリーンショット(ちょっと字が薄かったので、Kindle上でコントラストをもっとも濃くした状態):

[スクリーンショット]バイナリパッチ手法によって空白を除去した結果

奇数ページと偶数ページでちょっと余白の大きさが違うので、あまりキツキツにはできないけど、まぁこれで十分かもしんない。ファイルサイズも数分の一になるし。余白の自動認識をしているわけではないので設定は何度か試しながらツメないといけないけど、処理が一瞬なので苦にならないね。オライリーのebookは今後はこっちで処理しようかな……あー、いや、メタ情報の問題が残ってるか。ううむ。

Tags: kindle ebook

*1 先日紹介した方法はスクリーンショットを撮るのと変わらないので、DRM破りではないという認識。

関連する日記: 2012-06-12(火)
本日のツッコミ(全1件) [ツッコミを入れる]
ただただし (2011-04-04(月) 13:49)

追記: メタ情報もパッチで実現する方法: http://sakanaya.kir.jp/ymnet/diary/d/20110403/1


トップ «前日 最新 翌日» 編集
RSS feed