Generating epub.

This commit is contained in:
Vahagn Khachatryan
2018-12-17 18:24:51 +00:00
parent c579ee72c9
commit 040bb0b6dc
4 changed files with 405 additions and 34 deletions

View File

@@ -1,6 +1,8 @@
var fs = require("fs");
var JSZip = require('jszip');
let fs = require("fs");
let JSZip = require('jszip');
let EpubWriter = require('../src/epub')
let zip = new JSZip()
let epub = new EpubWriter()
new JSZip.external.Promise((resolve, reject)=>{
fs.readFile('test/mythical_man_month__the__essays_on_software_engineering__anniversary_edition.zip',
@@ -18,15 +20,122 @@ new JSZip.external.Promise((resolve, reject)=>{
})
})
.then((zip)=>{
console.log(zip)
zip.folder('EPUB').forEach((fileName, _)=>{
console.log(`${fileName}`)
return loadBookInfo(zip)
.then((book_info)=>{
createEbook(epub, book_info)
return copyContent(epub, zip)
})
.then(()=>{
return epub.generateAsync()
})
.then((file)=>{
fs.writeFile('ttttest.epub', file, (err) => {
if (err)
return console.log(err);
})
})
})
.catch((reason)=>{
console.log(`Error: ${reason}`)
})
function copyContent(epub, zip)
{
let jobs = []
zip.folder('EPUB').forEach((fileName, zipObj)=>{
console.log(`${fileName}`)
jobs.push(
zipObj.async('uint8array')
.then((buffer)=>{
epub.addFile(fileName, buffer)
})
)
})
return Promise.all(jobs)
}
function loadBookInfo(zip)
{
let book_json = zip.file('EPUB/book.json')
if (!book_json){
book_json = zip.file('META-INF/book.json')
}
return book_json.async('string')
.then((blob)=>{
return JSON.parse(blob)
})
}
console.log('test')
function createEbook(epub, book_info)
{
console.log(`${book_info}`)
// OPF file info.
fillManifest(epub, book_info)
fillSpine(epub, book_info)
fillGuide(epub, book_info)
fillMetadata(epub, book_info)
// NCX and NAV files.
fillToc(epub, book_info)
}
function fillMetadata(epub, book_info)
{
epub.meta.addTitle(book_info.book_info.title)
epub.meta.addLanguage(book_info.book_info.language)
epub.meta.addBookId(book_info.book_info.isbn)
for (let i in book_info.book_info.authors){
let author = book_info.book_info.authors[i]
epub.meta.addAuthor(author)
}
for (let i in book_info.book_info.publishers){
let publisher = book_info.book_info.publishers[i]
epub.meta.addPublisher(publisher.name)
}
// # The metadata element or deprecated dc-metadata element contains
// # at least one identifier element, at least one title element,
// # and at least one language element drawn from the Dublin Core tag
// # set.
// epub.set_title('Test Title')
// epub.set_language('en')
// epub.set_direction('ltr')
// # epub.set_cover(file_name, content, create_page=True):
// # epub.add_author(author, file_as=None, role=None, uid='creator'):
// # epub.add_metadata(namespace, name, value, others=None):
// # epub.set_unique_metadata(namespace, name, value, others=None):
}
function fillManifest(epub, book_info)
{
for (let key in book_info.book_files){
let f = book_info.book_files[key]
epub.meta.addManifest(f.filename, f.mime)
}
let f = book_info.book_files[book_info.book_info.cover]
epub.meta.addCover(f.filename)
}
function fillToc(epub, book_info)
{
for (let i in book_info.book_toc){
let toc_item = book_info.book_toc[i]
epub.meta.addToc(
toc_item.filename,
toc_item.label,
toc_item.depth)
}
}
function fillSpine(epub, book_info)
{
for (let i in book_info.book_info.chapters){
let s = book_info.book_info.chapters[i].split('/')
epub.meta.addSpine(s[s.length-1])
}
}
function fillGuide(epub, book_info)
{}