オライリーのeBook(PDF)の余白をカットする方法

オライリー(O'Reillyじゃないほう)のeBook(といってもPDFなんだけど)はDRMがかかっててPDF Scissorsで余白カットできなくて不便だ。って嘆いていたら id:nobeans さんに良い事教えてもらった。:-)



こりゃええわ、ってことで早速試す。といっても5インチのPRS-350で見られるようにするには、かなりカリカリに余白カットしないとイケないので、もう1冊ごとにトリミング指定したった。そんでも視力弱い人にはつらいかと思う。


だからさ、単に紙媒体をPDFにしただけでeBookって売っちゃアカンよなーって思うわけよ。相当安易なやり方だわな(つうか手抜きって言ったほうが近いかも)。PDFなんて、PCかiPadくらいしかまともに読めんよ。
といっても他の選択肢もSony ReaderかKindleくらいしか無いんだけどね。
GALAPAGOSはあえてスルー。:-)


ePub流行らすにも、そのプラットフォームが普及してないのが現状か...。って話題変わっちゃった。:-)



一応、個別設定したトリミングの設定を残しておく(元ネタはこちら→http://sakanaya.kir.jp/ymnet/diary/d/20110330)。

use strict;
use warnings;
 
# left, bottom, right, top
# Apacheクックブック, JavaによるRESTfulシステム構築
#my @offset = (65, 56, -65, -75);
# jQueryクックブック, 正規表現クックブック
#my @offset = (65, 41, -65, -81);
# WSHクリックリファレンス 第2版
#my @offset = (47, 54, -47, -82);
# アルゴリズム クイックリファレンス
#my @offset = (47, 42, -47, -66);
# Windows PowerShellクックブック
#my @offset = (65, 55, -65, -76);
# プログラマが知るべき97のこと
#my @offset = (45, 55, -45, -45);
# 正規表現クックブック
my @offset = (67, 45, -67, -81);
 
while(<*.pdf>)
{
    next if /-cropped/;
 
    open my $in, $_ or die;
    s/(.*)(\.pdf)$/$1-cropped$2/;
    open my $out, '>', $_ or die;
 
    binmode $in;
    binmode $out;
 
    while(<$in>)
    {
        s/(\/CropBox\s*\[\s*([^\[]+)\])/crop($1, $2)/eg;
        print $out $_;
    }
}
 
sub crop
{
    my @offset = @offset;
    my @pos = map{int $_ + shift @offset} split /\s+/, $_[1];
 
    my $crop = sprintf '/CropBox[%d %d %d %d]', @pos;
 
    my $blank = length($_[0]) - length $crop;
    warn $_[0] and return $_[0] if $blank < 0;
 
    return $crop.(' ' x $blank);
}