A node js tool to work with OpenDocument text files.
$ npm install odt
varfs=require('fs'),odt=require('odt'),template=odt.template,createWriteStream=fs.createWriteStreamvardoc='mytemplate.ott';varvalues={'subject': {type: 'string',value: 'My subject value'}};// apply valuestemplate(doc).apply(values).on('error',function(err){throwerr;}).on('end',function(doc){// write archive to disk.doc.pipe(createWriteStream('mydocument.odt'))doc.finalize(function(err){if(err)throwerr;console.log('document written!');});});This example can be written much easier using the convenience methods pipe()
and finalize().
varfs=require('fs'),odt=require('odt'),template=odt.template,createWriteStream=fs.createWriteStreamvardoc='mytemplate.ott';varvalues={'subject': 'My subject value'};// apply valuestemplate(doc).apply(values).on('error',function(err){throwerr;}).finalize(function(bytes){console.log('The document is '+bytes+' bytes large.');}).pipe(createWriteStream('mydocument.odt')).on('close',function(){console.log('document written');});For a more advanced example see the command line utility in bin/node-odt.
The main class to work with templates. arg can be a path to the odt file or
a stream with the odt contents. Template inherits from EventEmitter and
fires the following events:
error- Fired if an error occurs.end(document)- Fired when the document is complete.
Applies the values to the template. values is an object of the following
form:
{"field-name": {"type": "field-type","value": "field-value"}}e.g.
{"subject": {"type": "string","value": "My subject"},
...
}string- This type is well supported and does what you think.date- This type can be either an unix timestamp (Number) or a javascriptDate.cent- This type should have an integer as value which is converted into a float representing theEurocurrency.
Registers a handler to modify the content. handler is a function of the form
function(content, done) while content is the parsed xml data of the
content.xml file in the document archive. done is a function which needs
to be called upon completion.
Pipes the archive to stream.
Register a handler on the 'finalized' event. This was formerly needed to launch the finalization of the archive. But this is done automatically now.
This handler applies a table template to a table defined by libreoffice.
Warning: This part of the code is yet pretty unstable and might be changed in future. Use it carefully.
varodt=require('odt'),table=require('odt/handler').table;odt.template('mytemplate.ott').apply(table({Table1: {'subject': { ... },
...
}}))...
