はじめに
こんにちは、Stackdriver担当者です。海外旅行に向けて準備をしているのですが、Kindleに読みたい書籍をLinuxの端末のみを使って入れるのに苦戦したのでメモを書いておきます。
Kindle Paperwhite、電子書籍リーダー、防水機能搭載、Wi-Fi 、8GB(Newモデル)
- 出版社/メーカー: Amazon
- 発売日: 2018/11/07
- メディア: エレクトロニクス
- この商品を含むブログを見る
TL;DR
- 右綴じ書籍対応のためにPDFを全部逆順にした(
pdftk
使用) - PDFのサイズ圧縮にGhostscriptを使った
- これでなんとか Send to Kindle が使えた
PDFのページを逆順にする
Kindleアプリは使ってないのでわかりませんが、ハードウェアのKindle*1では、典型的な日本語の書籍(縦書き右綴じ)の書籍を開くのに対応していません。
そこで仕方なく、PDFページを全部逆順にしたあとに末尾ページ(=元ファイルの先頭ページ)から戻していくことで右開きを実現しました。
$ pdftk input.pdf cat N-1 output output.pdf
ここで入力値は以下の通り
- input.pdf: 元のPDFファイル名
- N: PDFのページ数
- output.pdf: 出力する逆順にしたPDFファイル名
PDFサイズを圧縮する
さて、これで Send to Kindle by Email でさくっと送るぞと思ったら、Gmailの添付するファイルサイズの上限を超えていて「Google Driveのリンクをシェアしますか?」とか聞かれたので困った。見てみたらファイルサイズが50MBを超えている。
ちょっと調べてみたらGhostscriptを使ってPDFを簡単に圧縮できるようだったので試してみた。
$ gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/ebook -sOutputFile=output.pdf input.pdf
ここで入力値は以下の通り
- input.pdf: 先程逆順にしたPDFファイル名
- output.pdf: 圧縮済みのPDFファイル名
また各種オプションはmanや公式ドキュメントを見てもらったほうが良いですが、メモとして残しておくと
- -dBATCH と -dNOPAUSE: PDFファイルの各ページごとに停止して確認しながらループするのではなく、全ページ一気に処理するときに指定
- -sDEVICE: 出力先デバイスの指定なんだけど、PDFファイルに書き込む場合はここで
pdfwrite
を指定 - -dCompatibilityLevel: 圧縮する際のAdobe Distiller 5互換のパラメータ(ここの表参照)
- -dPDFSETTINGS: Adobe Distillerに対するプリセットの設定群を適用できるラベル。電子書籍用であれば
/ebook
を指定するのが良いと思う。(/screen
だと粗すぎると感じた)
処理結果
% ls -lh *.pdf -rw-r--r-- 1 ymotongpoo users 20M 4月 14 19:23 reversed-compressed.pdf -rw-r--r-- 1 ymotongpoo users 53M 4月 14 18:50 reversed.pdf -rw-r--r-- 1 ymotongpoo users 53M 4月 14 18:47 original.pdf
53MBが20MBに圧縮されました!
参照
- https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
- Amazon.com: Send to Kindle by E-mail
- How to Reduce PDF File Size in Linux | Techwalla.com
- Ghostscript
*1:自分が持っているのはKindle Paperwhite