fcs
2025-04-10 0163870d662dc5b7d69ceff977490ede594f7d82
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// 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('<html>\n<head></head>\n<body>\n')
      response.write('<h1>Please enter your name here:</H1>\n')
      response.write(
        '<form method="post" action="http://127.0.0.1:3000/"><input type="text" name="name"><input type="submit" value="Submit"></form>\n'
      )
      response.write('</body>\n</html>\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')