KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

Android版AozoraEpub3公開に向けて

Android版AozoraEpub3を作れないかを試してみた。EPUB出力まで言ったので途中段階だけど公開してみよう。画像ファイルの読み込みが上手くいかないのと外字フォントや設定変更などの機能をつけていない。ちゃんと動くまで公開しないといつまでも公開できそうにないので。

ソフト名の案、

  • AozoraEpub3 for Android 青空文庫テキスト→ePub3変換
  • AozoraEpub3 Android

github.com

ベースは改造版AozoraEpub3v1.1.1b30Q

github.com

AozoraEpub3 for Androidのgithubのリポジトリ名を考えて ChatGPT: GitHubのリポジトリ名として、以下のような候補を考えました!

シンプル & わかりやすい AozoraEpub3-Android ✅(標準的で直感的) AozoraEpub3-for-Android(フル表記だが、やや長め) AozoraE3-Android(短縮形でスッキリ)

githubからリポジトリを作ってクローンするとプロジェクトテンプレートがない。後からプロジェクトをテンプレートを追加する方法がよくわからなかった。android studioをgithubと連携させて、リポジトリを作成する方法にした。

qiita.com

アンドロイドのプロジェクト

kotlinではなくgroovyを選びがち。kotlinはJavaより簡単と言われるがJavaのほうが検索したら資料が見つかるために問題の解決がしやすい。

Files.copy時にalready existエラーが出る

REPLACE_EXISTINGのオプション設定をすることで上書きする。

www.javadrive.jp

文字コード自動判別をどこに入れるか

     //文字コード判別
        String encauto ="";
        //エンコード設定を一時退避する
        String encType = (String)jComboEncType.getSelectedItem();
        try {
            encauto=AozoraEpub3.getTextCharset(srcFile, ext, imageInfoReader, txtIdx);
            if (Objects.equals(encauto, "SHIFT_JIS"))encauto="MS932";
        } catch (IOException | RarException e1) {
            // TODO 自動生成された catch ブロック
            e1.printStackTrace();
        }

zip時には変換が成功してtxt時に変換が失敗していたのが、txt変換処理の部分のコードを書いていなかった。文字コード自動判別時にはじめの方のテキストが切り取られていたので変換時に変な結果になった。

挿絵のテスト

「雪 中谷宇吉郎」でテストした [WARN] 画像ファイルなし:と出て止まった。zipファイルだったので原因を特定するために、txtと画像を直接読み込んでどうなるかを調べる。 ファイル読み込みでtxtとzipの単一ファイルのみに制限しているので、複数ファイル選択を可にして画像ファイルも選択可能にする。

www.aozora.gr.jp

外字フォント

なんかファイルが生成されなくなった。Device Exploler上にはあるがファイル名が変わっていて、開くと「Error opening contents of device file」というエラーが出る。設定を変えたら生成する場合としない場合がある。

コマンドラインからの変換処理を利用しているが、GUIからの処理のほうがいいのではないか。

入力内容

  • 本文テキスト
  • 挿絵
  • 表紙 option項目 表紙ファイル、出力拡張子、縦書き横書きなど

medium.com

内部ストレージからファイルをSAFで保存させるには

SAF (Storage Access Framework) でファイルを読み込み → 内部ストレージにコピー → 処理後に SAF で保存 Android 11 以降の Scoped Storage に対応した方法 で、

SAF を使ってファイルを選択(ユーザーが選ぶ) 内部ストレージ (getFilesDir()) にコピー 内部ストレージのデータを加工・処理 SAF を使ってユーザーの指定した場所に保存 を行う方法を紹介します。