epublibで電子書籍を作成する

イントロダクション

電子書籍を書こうと思います。色々な方法があるようです。

  • MarkDownからEPUBを生成する
  • GoogleDocからEPUBを生成する
  • JavaでEPUBを生成する

そして、EPUBファイルの中身は下のように、ファイルがあるようです。

  • mimetype
  • META-INF
  • ドキュメントを格納したフォルダ

mimetypeは固定で、ZIPコマンドで下のように実行します。

zip -0 作成するEPUB.epub mimetype
zip -9r 作成するEPUB.epub * -x mimetype

他にも下のような形での実行もできるようです。これはMac、リナックス版かな?オプションの9はつけた方が良い推奨的なものらしい。

zip -0 -X ../ebook.epub mimetype
zip -r ../ebook.epub * -x mimetype

JavaでEPUBを出力する方法

電子書籍をJavaで作れないか調べたところ、ありました。
このサイトにepublibの使い方などが書いてあった。

引用すると下のようなものです。

Epublib は、epub ファイルを管理するための Java ライブラリです。プログラムおよびコマンドライン ツールから epub ファイルの読み取りと書き込みが可能です。

Epublib は、コマンドライン ツールも付属するライブラリです。これは、より大きな Java アプリケーションの一部として、またコマンドライン ツールとして使用することを目的としています。

epublibを使う

下のようにMavenを使ってやりました。
POMファイルに下のように記述して、再ビルドすれば準備オッケーでした。
そして、JavaDocはここにありました。

リポジトリの追加

  <repositories>
    <repository>
      <id>psiegman-repo</id>
      <url>https://github.com/psiegman/mvn-repo/raw/master/releases</url>
    </repository>
  </repositories>

ライブラリの追加

  <dependencies>
    <dependency>
      <groupId>nl.siegmann.epublib</groupId>
      <artifactId>epublib-core</artifactId>
      <version>3.1</version>
    </dependency>
  </dependencies>

リソースの準備

そして、プログラムともとになるHTMLファイルを用意

プログラムの作成と実行

出力したものはこちらのYOUTUBEで見れます。

Githubにソースがあったのでそれを参考にしました。

【作成したコード】
元々あったコード(サンプルコード)を改造しています。改造した部分はリソースの取得部分「getResource(引数は一つ)」です。
ここでgetResourceAsStream()を使うとパスの指定が違ってしまったので、Pathsで取得してInputStreamを生成、返却するように修正しました。

    private static InputStream getResource(String path ) throws IOException{
        Path p = Paths.get(path);
        InputStream im = Files.newInputStream(p);
//        InputStream im = Main.class.getResourceAsStream( path );
        if (im == null) {
            throw new IOException("ファイルが取得できませんでした。" + path);
        }
        return im;
    }

    private static Resource getResource(String path, String href ) throws IOException {
        Resource res = new Resource( getResource( path ), href );
        return res;
    }
    public static void main(String[] args) {
        try {
            // Create new Book
            Book book = new Book();
            Metadata metadata = book.getMetadata();

            // Set the title
            metadata.addTitle("EPUB4J test book 1");

            // Add an Author
            metadata.addAuthor(new Author("Joe", "Tester"));

            final String ROOT = "src/main/resources";
            // Set cover image
            book.setCoverImage(
                    getResource(ROOT + "/book1/test_cover.png", "cover.png"));

            // Add Chapter 1
            book.addSection("Introduction",
                    getResource(ROOT + "/book1/chapter1.html", "chapter1.html"));

            // Add css file
            book.getResources().add(
                    getResource(ROOT + "/book1/book1.css", "book1.css"));

            // Add Chapter 2
            TOCReference chapter2 = book.addSection( "Second Chapter",
                    getResource(ROOT + "/book1/chapter2.html", "chapter2.html"));

            // Add image used by Chapter 2
            book.getResources().add(
                    getResource(ROOT + "/book1/flowers_320x240.png", "img/gardening.png"));

            // Add Chapter2, Section 1
            book.addSection(chapter2, "Chapter 2, section 1",
                    getResource(ROOT + "/book1/chapter2_1.html", "chapter2_1.html"));

            // Add Chapter 3
            book.addSection("Conclusion",
                    getResource(ROOT + "/book1/chapter3.html", "chapter3.html"));

            // Create EpubWriter
            EpubWriter epubWriter = new EpubWriter();

            // Write the Book as Epub
            epubWriter.write(book, new FileOutputStream("test1_book1.epub"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

課題

ここまでなんとかできたけど、ページを適当なところで次ページに移動したい。ここら辺のコントロール方法が知りたい。

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す