Kindleの電子書籍をPDF化したいと思ったことはありませんか?
PDF形式にしておけば、自由にメモを書き込めるなど活用の幅が広がるため、「自分でもやってみたい」と考える方は多いはずです。
私も以前から興味があり、過去に自作プログラムに挑戦したこともあります。今回は、ネット上で公開されている既存のプログラムを活用して、効率的に進めてみることにしました。
参考にさせていただいたのは、以下のブログです。
「【コピペOK】Pythonで実装するKindleのPDF化ー①スクリーンショット編」
(https://note.com/lytton_life/n/n523c648fad71)
このブログによると、PDF化のプロセスは大きく以下の3段階に分かれます。
全ページのスクリーンショットを撮る
余白を適切に削除して整える
画像ファイルを一つのPDFに集約する
まずは、第一段階である「全ページのスクリーンショットを撮る」プログラムをそのままお借りして、試してみることにしました。
実行時に発生したエラー
ブログ内のコード(背景が黒いコードブロック)をコピーし、私のPython環境で実行してみたところ、以下のようなエラーが発生してしまいました。
Python
Traceback (most recent call last):
File "C:/Python/kindletopdf.py", line 165, in <module>
main()
File "C:/Python/kindletopdf.py", line 159, in main
total_pages = capture_and_save_pages(lft, rht, title)
File "C:/Python/kindletopdf.py", line 102, in capture_and_save_pages
old = np.zeros((sc_h, rht-lft, 3), np.uint8)
TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType'
ネット上のサンプルコードが、自分の環境ですぐには動かないというのはよくある話です。以前なら、エラーメッセージを読み解きながら自力で修正していましたが、今回はGeminiに助けてもらうことにしました。
Geminiによるコード修正
使用したのは最新の「Gemini 3.1 Pro」です。プログラムファイルをアップロードし、エラーメッセージを添えて次のように依頼しました。
プロンプト:
「添付のファイルを実行したところ、上記のエラーが出ました。プログラムを修正してください」
すると、Geminiから「1. エラーの原因」と「2. 修正方法」の2点について、的確な回答が返ってきました。
1. エラーの原因
原因は、プログラムがKindleの「ページの境界(端)」を自動検出できず、左端(lft)と右端(rht)の変数に None(値なし)が入ってしまったことでした。その結果、 None - None という計算を行おうとしてクラッシュしていたのです。
2. 修正方法
境界が見つからなかった場合にエラーで停止するのではなく、「とりあえず画面の左右いっぱいのサイズを採用する」という安全対策(フォールバック処理)を追加する提案がありました。
具体的には、find_content_boundaries 関数と main 関数の一部を書き換える修正案を提示してくれました。
修正後の結果
Geminiの提案通りに修正を行ったところ、プログラムは見事に動作。300ページほどのKindle本を、わずか数十秒ですべてキャプチャすることができました。
プログラミングを学んでいると、紹介されたコードが期待通りに動かず、そこで挫折してしまうこともあります。しかし、Geminiに相談すれば原因の特定から修正案の作成まで一瞬で行ってくれます。
「AIをプログラミングの副操縦士(コパイロット)にする」ことの便利さを、改めて実感した体験でした。

0 件のコメント:
コメントを投稿