イントロダクション
電子書籍を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();
}
}
課題
ここまでなんとかできたけど、ページを適当なところで次ページに移動したい。ここら辺のコントロール方法が知りたい。