BOOKSCANでは本の表紙(カバー)をスキャンしてもらえないので、自動修正スクリプトを作りました
あけましておめでとうございます。
年末に家にある書籍(主にマンガ)をごそっとBOOKSCANでスキャンしてもらって部屋がスッキリ!したのはいいのですが、BOOKSCANでは書籍のカバーをスキャンしてもらえないという仕様で、ちょっとどうにかしたいなあと思っていました。
注文する時にリネームオプションをつければスキャン後のファイル名にISBNが追加されるため、BOOKSCAN上ではこのISBNから自動取得した画像がWEBページに表示されているのですが、i文庫など一般の電子書籍リーダーで表示すると、このような残念な感じの表示になってしまいます。
幸いファイル名は「DEATH NOTE (1) (ジャンプ・コミックス) 小畑 健 200p_4088736214.pdf」という規則性のある感じになっているので、BOOKSCANがやってることと同じことやれば解決できるじゃないか、ということで、正月だし、息抜きにこの問題を解決するスクリプトを書いてみました。
require "prawn" require 'fastimage' list = [] Dir.entries(ARGV[0]).each do |file| next unless File.extname(file) == '.pdf' list << file end list.each do |file| puts file # ISBNからカバー画像ファイル取得 file =~ /_(.*).pdf/ image_name = "#{$1}.09.LZZZZZZZ.jpg" `wget http://images-jp.amazon.com/images/P/#{image_name}` # カバー画像のみのPDFを生成 Prawn::Document.generate('cover.pdf', :page_size => FastImage.size(image_name)) do |pdf| pdf.image image_name, :position => :center, :vposition => :center # 見開きが崩れないように空白ページを差し込み pdf.start_new_page end # :page_sizeを指定すると1p目に空白ページが入ってしまうので消す `pdftk cover.pdf cat 2-end output cover2.pdf` # 元のPDFファイルと結合 `pdftk cover2.pdf "#{file}" cat output "_#{file}"` # 後処理 `rm cover.pdf cover2.pdf #{image_name}` end
手順としてはこんな感じです。
- ISBNから画像取得
- Prawnを使ってカバー写真をPDFに変換
- PDFtk Serverを使って元のPDFに差し込む
あとはPDFが入っているフォルダを指定すれば自動で全部カバー写真入りのPDFが仕上がります。
ruby add_cover.rb "/Users/ntaku/Desktop/death_note"
さっきは残念だったi文庫での表示もこんな感じになりました。
書籍によってはAmazonから取得できる画像が小さくてちょっと残念なのですが、サムネイル一覧で見る分にはこれで十分!
これで心置きなくBOOKSCANを使えるようになりました。