PDFをタブレットで読む

年末年始はこの本を読んでいた。

コピーコントロールがない電子書籍が買える場合はなるべくKindleよりもそちらを買うことにしている。 翔泳社は自前でPDF版を売っていて、しかもしばしば40%オフといった大幅値引きのセールを行なっているので、今回はそこで買った。

www.seshop.com

オライリー技術評論社電子書籍ePubが取得できる場合が多くて、基本はGoogle Play Booksのアップロード機能を使い、Kindleでも読める本の場合はSend to Kindleを使っている。

しかしKindleGoogle Play Booksは、PDFの目次が表示できないので使いづらい。Acrobatか、iPadで読むだけであればブック.appを使うことで、目次やハイライトが使える。

しかし、翔泳社が販売しているPDFにはオーナーパスワードが設定されていて、印刷やコピーができない設定になっている。しかもiPadで読むときは、ブック.appでハイライトしたら時々パスワード入力が求められ、Acrobatで読むときは「読み取り専用」になってハイライトを含め一切書き込みができなくなる。これは非常に使いづらいので、ロックを解除することにした。

PDFのオーナーパスワードはコピーコントロールや暗号化に該当せず、コピー等の制限も単にリーダー側がそれに従うように実装しているだけのもの(例えばFirefoxで使われているPDF.jsでは権限を無視する)なので、ロックを解除しても著作権法には違反しないと思う。私は法律の専門家ではなく、この記事を事前に専門家にレビューしてもらっているわけでもないので、真似する場合はあくまでも自己責任で、個人利用のためだけにして欲しい。

一番お手軽な方法はロック解除をしてくれるサイトを使うことだ。リンクは書かないが、 "smallpdf" で検索するとロック解除できるサイトが出てくる。

Pythonでは、pikepdfというライブラリを利用すると簡単にロック解除できた。

# pip install pikepdf
import sys
import pathlib
from pikepdf import Pdf

src = pathlib.Path(sys.argv[1])
dst = pathlib.Path(src.with_stem(src.stem + '-unlocked'))
print(f"{src} -> {dst}")
with Pdf.open(src) as pdf:
    pdf.save(dst)

ファイルを開いて保存しているだけのコードだが、pikepdfは pdf.save() のオプションでオーナーパスワードや権限を設定するので、これでパスワードなし、コピーや印刷の制限もなしのPDFに変換できる。中身はメタデータを含めて一切変更していないので、目次だったりすでに書き込んでいるハイライトやメモなどは維持されるはずだ。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。