Generating epub.
This commit is contained in:
121
test/app.js
121
test/app.js
@@ -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)
|
||||
{}
|
||||
Reference in New Issue
Block a user