// 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 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)
})
var 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')