OSDN Git Service

Support SCORM
authorTakeyuki NAGAO <nagaotakeyuki@gmail.com>
Thu, 7 Mar 2013 07:51:53 +0000 (16:51 +0900)
committerTakeyuki NAGAO <nagaotakeyuki@gmail.com>
Thu, 7 Mar 2013 07:51:53 +0000 (16:51 +0900)
pom.xml
src/main/java/jp/sourceforge/dvibrowser/dvi2epub/Dvi2EpubCmd.java
src/main/java/jp/sourceforge/dvibrowser/dvi2epub/epub/EpubWriter.java

diff --git a/pom.xml b/pom.xml
index 96b25a7..c1b58eb 100644 (file)
--- a/pom.xml
+++ b/pom.xml
        </repositories>\r
 \r
   <dependencies>\r
+    <dependency>\r
+      <groupId>commons-lang</groupId>\r
+      <artifactId>commons-lang</artifactId>\r
+      <version>2.6</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>commons-io</groupId>\r
+      <artifactId>commons-io</artifactId>\r
+      <version>2.4</version>\r
+    </dependency>\r
   </dependencies>\r
 \r
   <build>\r
index af020e8..302dad1 100644 (file)
@@ -37,9 +37,14 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.util.Date;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.UUID;
 import java.util.logging.LogManager;
 
 import javax.imageio.ImageIO;
+import org.apache.commons.lang.*;
+import org.apache.commons.io.*;
 
 import jp.sourceforge.dvibrowser.dvi2epub.cmd.AnnotatedCommand;
 import jp.sourceforge.dvibrowser.dvi2epub.cmd.Command;
@@ -106,6 +111,7 @@ public class Dvi2EpubCmd extends AnnotatedCommand {
                        
                        DviDocument doc = ctx.openDviDocument(inputFile);
                        DviToolkit toolkit = ctx.getDviToolkit();
+      List<String> recs = new ArrayList<String>();
                        for (DviPage page : doc.getPages()) {
                                int pn = page.getPageNumber() + 1;
                                System.out.printf("[%d]", pn);
@@ -125,7 +131,39 @@ public class Dvi2EpubCmd extends AnnotatedCommand {
                                                String.format("%s<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='ja' lang='ja'><body>%s<img src='images/page%04d.%s' /></body></html>", docType, body, pn, formatExt)
                                                , true, true, true);
                                png.delete();
+        recs.add(
+          String.format("{'id':%d, url:'%s', image:'%s'}",
+            pn, "page.html", imageFile
+          )
+        );
                        }
+      if (true) {
+        // SCORM
+        UUID orgUUID = UUID.randomUUID();
+        UUID itemUUID = UUID.randomUUID();
+        UUID resUUID = UUID.randomUUID();
+        List<String> manifest = IOUtils.readLines(
+          Dvi2EpubCmd.class.getResourceAsStream("tpl/manifest.txt"),
+          "UTF-8"
+        );
+        String pages = '[' + StringUtils.join(recs, ',') + ']';
+        for (String line : manifest) {
+          String [] rec = line.split(",", -1);
+          String mimeType = rec[0];
+          String path = rec[1];
+          String c = IOUtils.toString(
+            Dvi2EpubCmd.class.getResourceAsStream("tpl/" + path), "UTF-8"
+          );
+          c = c.replace("$(UUID)",       epubWriter.getUUID().toString());
+          c = c.replace("$(ORG_UUID)",   orgUUID.toString());
+          c = c.replace("$(TITLE)",      title);
+          c = c.replace("$(ITEM_UUID)",  itemUUID.toString());
+          c = c.replace("$(RES_UUID)",   resUUID.toString());
+          c = c.replace("$(ITEM_TITLE)", title);
+          c = c.replace("$(PAGES)",      pages);
+          epubWriter.writeFile(path, mimeType, c, false, false, false);
+        }
+      }
                        epubWriter.close();
                        System.out.println();
                        System.out.println("Output written on " + outputFile);
index b4bb1ed..318dc57 100644 (file)
@@ -292,7 +292,7 @@ public class EpubWriter
                this.author = author;
        }
 
-       public UUID getUuid() {
+       public UUID getUUID() {
                return uuid;
        }
 }