# generates a rudimentary epubDas Script wird mit 2 Parametern aufgerufen, der erste gibt den Namen (nicht Pfad) des Zieldokumentes an, der zweite das Verzeichnis mit den OCR-Dateien. Es erzeugt dann das Dokument im Verzeichnis /tmp als $NAME.epub
NAME=/tmp/$1
DIR=$(echo $2|sed -e "s/\/$//g")
PAGES=$(ls $DIR)
mkdir -p $NAME
mkdir -p $NAME/$DIR
echo -n "application/epub+zip" >$NAME/mimetype
mkdir -p $NAME/META-INF
cat <<CONTAINER >$NAME/META-INF/container.xml
<?xml version="1.0" encoding="UTF-8"?>
<container
xmlns="urn:oasis:names:tc:opendocument:xmlns:container"
version="1.0">
<rootfiles>
<rootfile
full-path="$DIR/inhalt.opf"
media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
CONTAINER
cat <<OPF1 >$NAME/$DIR/inhalt.opf
<?xml version="1.0" encoding="UTF-8"?>
<package
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:opf="http://www.idpf.org/2007/opf"
xmlns="http://www.idpf.org/2007/opf"
version="2.0"
unique-identifier="BookId">
<metadata>
<dc:language xsi:type="dcterms:RFC3066">de-DE</dc:language>
<dc:title>Hello World</dc:title>
<dc:identifier id="BookId">id_Hello_World</dc:identifier>
</metadata>
<manifest>
<item id="ncx" href="inhalt.ncx" media-type="application/x-dtbncx+xml"/>
OPF1
for i in $PAGES; do
cat <<OPF2 >>$NAME/$DIR/inhalt.opf
<item id="Datei_$i" href="$i.xhtml" media-type="application/xhtml+xml"/>
OPF2
done
cat <<OPF3 >>$NAME/$DIR/inhalt.opf
</manifest>
<spine toc="ncx">
OPF3
for i in $PAGES; do
cat <<OPF4 >>$NAME/$DIR/inhalt.opf
<itemref idref="Datei_$i"/>
OPF4
done
cat <<OPF5 >>$NAME/$DIR/inhalt.opf
</spine>
</package>
OPF5
cat <<NCX1 >$NAME/$DIR/inhalt.ncx
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ncx
PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx
xmlns="http://www.daisy.org/z3986/2005/ncx/"
version="2005-1"
xml:lang="de-DE">
<head>
<meta name="dc:Title" content="Hello World"/>
<meta name="dtb:uid" content="id_Hello_World"/>
</head>
<docTitle>
<text>Hello World</text>
</docTitle>
<navMap>
NCX1
for i in $PAGES; do
cat <<NCXPAGES >>$NAME/$DIR/inhalt.ncx
<navPoint playOrder="1" id="id_$i">
<navLabel>
<text>$i</text>
</navLabel>
<content src="$i.xhtml"/>
</navPoint>
NCXPAGES
done
cat <<NCX2 >>$NAME/$DIR/inhalt.ncx
</navMap>
</ncx>
NCX2
for i in $PAGES; do
cat <<XHTML1 >$NAME/$DIR/$i.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"/>
<title>$i</title>
<meta name="DC.identifier" content="id_$i"/>
</head>
<body>
XHTML1
cat $DIR/$i | sed -e "s/&/&/g" -e "s/</</g" -e "s/>/>/g" >>$NAME/$DIR/$i.xhtml
cat <<XHTML2 >>$NAME/$DIR/$i.xhtml
</body>
</html>
XHTML2
done
pushd $NAME
zip -Z store -X $NAME.epub mimetype
zip -9 -X -r $NAME.epub META-INF/
zip -9 -X -r $NAME.epub $DIR/
popd
Das Script enthält noch kein Feintuning und die Kapitel entsprechen den Seitenzahlen. Um das erzeugte Epub-Dokument auf Korrektheit zu testen benutze ich den Validator EPubCheck Version 3.0. Dieser prüft sehr genau und es hat eine Weile gedauert, bis das Script ein nahezu fehlerfreies Dokument erzeugt hat. Zum Prüfen des erzeugten EPUB einfach folgenden Aufruf verwenden: java -jar epubcheck-x.x.x.jar file.epub
Einen Zwischenstand des Buches gibt es hier: https://www.dropbox.com/s/sf9j53ovg7qku0p/Bunte_Bilder_2013-01-13.epub