// Simple server that displaying form to ask the user name and then generate PowerPoint stream with the user's name
// without using real files on the server side.
var officegen = require('../');
var fs = require('fs');
var http = require("http");
var querystring = require('querystring');
function postRequest ( request, response, callback ) {
var queryData = "";
if ( typeof callback !== 'function' ) return null;
if ( request.method == 'POST' ) {
request.on ( 'data', function ( data ) {
queryData += data;
if ( queryData.length > 100 ) {
queryData = "";
response.writeHead ( 413, {'Content-Type': 'text/plain'}).end ();
request.connection.destroy ();
}
});
request.on ( 'end', function () {
response.post = querystring.parse ( queryData );
callback ();
});
} else {
response.writeHead ( 405, { 'Content-Type': 'text/plain' });
response.end ();
}
}
http.createServer ( function ( request, response ) {
if ( request.method == 'GET' )
{
response.writeHead ( 200, "OK", { 'Content-Type': 'text/html' });
response.write ( '\n
\n\n' );
response.write ( 'Please enter your name here:
\n' );
response.write ( '\n' );
response.write ( '\n\n' );
response.end ();
} else
{
postRequest ( request, response, function () {
// console.log ( response.post );
response.writeHead ( 200, {
"Content-Type": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
'Content-disposition': 'attachment; filename=surprise.pptx'
});
// .xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
// .xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template
// .potx application/vnd.openxmlformats-officedocument.presentationml.template
// .ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
// .pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
// .sldx application/vnd.openxmlformats-officedocument.presentationml.slide
// .docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
// .dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
// .xlam application/vnd.ms-excel.addin.macroEnabled.12
// .xlsb application/vnd.ms-excel.sheet.binary.macroEnabled.12
var pptx = officegen ( 'pptx' );
pptx.on ( 'finalize', function ( written ) {
console.log ( 'Finish to create the surprise PowerPoint stream and send it to ' + response.post.name + '.\nTotal bytes created: ' + written + '\n' );
});
pptx.on ( 'error', function ( err ) {
console.log ( err );
});
slide = pptx.makeNewSlide ();
slide.back = '000000';
slide.color = 'ffffff';
slide.addText ( 'Hello ' + response.post.name + '!', { y: 20, cx: '100%', font_size: 56, font_face: 'Arial', bold: true, color: 'ffff00', align: 'center' } );
slide.addText ( 'Requested URL', { y: 150, cx: '50%' } );
slide.addText ( request.url, { y: 150, x: '50%', cx: '50%', color: '0000ff' } );
slide.addText ( 'Request Method', { y: 180, cx: '50%' } );
slide.addText ( request.method, { y: 180, x: '50%', cx: '50%', color: '0000ff' } );
slide.addText ( 'Request Dara', { y: 210, cx: '50%' } );
slide.addText ( response.post.name, { y: 210, x: '50%', cx: '50%', color: '0000ff' } );
pptx.generate ( response );
});
} // Endif.
}).listen ( 3000 );
console.log ( 'The PowerPoint server is listening on port 3000.\n' );