UNPKG

officegen-dbb

Version:

Modification of Ziv Barber's officegen, to provide a reasonable way to have line breaks in table cells.

499 lines (443 loc) 14.7 kB
var officegen = require('../'); var OfficeChart = require('../lib/officechart.js'); var _ = require('lodash'); var async = require('async'); var fs = require('fs'); var path = require('path'); var pptx = officegen('pptx'); var slide; var pObj; pptx.on('finalize', function (written) { console.log('Finish to create a PowerPoint file.\nTotal bytes created: ' + written + '\n'); // clear the temporatory files }); pptx.on('error', function (err) { console.log(err); }); pptx.setDocTitle('Sample PPTX Document'); // this shows how one can get the base XML and modify it directly var chart0 = new OfficeChart({ title: 'Dynamically generated', renderType: 'bar', overlap: 50, gapWidth: 25, valAxisTitle: "Da Value Axis", catAxisTitle: "Da Cat Axis", catAxisReverseOrder: true, valAxisCrossAtMaxCategory: true, valAxisMajorGridlines: true, valAxisMinorGridlines: true, data: [ { name: 'Income', labels: ['2005', '2006', '2007', '2008', '2009'], values: [23.5, 26.2, 30.1, 29.5, 24.6], // schemeColor: 'accent1' // color: 'ff0000', xml: { "c:spPr": { "a:solidFill": { "a:schemeClr": { "@val": "accent1"} }, "a:ln": { "a:solidFill": { "a:schemeClr": { "@val": "tx1"} } } } } }, { name: 'Expense', labels: ['2005', '2006', '2007', '2008', '2009'], values: [18.1, 22.8, 23.9, 25.1, 25], xml: { "c:spPr": { "a:solidFill": { "a:schemeClr": { "@val": "bg2"} }, "a:ln": { "a:solidFill": { "a:schemeClr": { "@val": "tx1"} } } } // color: '00ff00', // schemeColor: 'bg2' } } ], fontSize: "1200" // xml: { // "c:txPr": { // "a:bodyPr": {}, // "a:listStyle": {}, // "a:p": { // "a:pPr": { // "a:defRPr": { // "@sz": "1200" // } // }, // "a:endParaRPr": { // "@lang": "en-US" // } // } // } // } }); var chartsData = [ chart0, { "title": "Marginal distribution for mpg", "renderType": "column", "valAxisNumFmt": "0%", valAxisMaxValue: 24, "data": [ { "name": "current", "labels": [ "[NA]", "14.1 to 16", "16.1 to 18", "18.1 to 20", "20.1 to 22", "22.1 to 24", "24.1 to 26", "26.1 to 28", "28.1 to 30", "30.1 to 32", "32.1 to 34", "44.1 to 46" ], "values": [ 0.024390243902439025, 0.17073170731707318, 0.1951219512195122, 0.21951219512195122, 0.14634146341463414, 0.21951219512195122, 0, 0.024390243902439025, 0, 0, 0, 0 ], "xml": { "c:spPr": { "a:solidFill": { "a:schemeClr": { "@val": "accent1" } }, "a:ln": { "a:solidFill": { "a:schemeClr": { "@val": "tx1" } } } } } }, { "name": "baseline", "labels": [ "[NA]", "14.1 to 16", "16.1 to 18", "18.1 to 20", "20.1 to 22", "22.1 to 24", "24.1 to 26", "26.1 to 28", "28.1 to 30", "30.1 to 32", "32.1 to 34", "44.1 to 46" ], "values": [ 0.017241379310344827, 0.008620689655172414, 0, 0.017241379310344827, 0.1896551724137931, 0.1810344827586207, 0.29310344827586204, 0.15517241379310345, 0.0603448275862069, 0.034482758620689655, 0.034482758620689655, 0.008620689655172414 ], "xml": { "c:spPr": { "a:solidFill": { "a:schemeClr": { "@val": "bg2" } }, "a:ln": { "a:solidFill": { "a:schemeClr": { "@val": "tx1" } } } } } } ] }, { title: 'My production', renderType: 'pie', data: [ { name: 'Oil', labels: ['Czech Republic', 'Ireland', 'Germany', 'Australia', 'Austria', 'UK', 'Belgium'], values: [301, 201, 165, 139, 128, 99, 60], colors: ['ff0000', '00ff00', '0000ff', 'ffff00', 'ff00ff', '00ffff', '000000'] } ] }, { title: 'eSurvey chart', renderType: 'column', overlap: 50, gapWidth: 25, valAxisNumFmt: '$0', valAxisMaxValue: 24, data: [ { name: 'Income', labels: ['2005', '2006', '2007', '2008', '2009'], values: [23.5, 26.2, 30.1, 29.5, 24.6], color: 'ff0000' }, { name: 'Expense', labels: ['2005', '2006', '2007', '2008', '2009'], values: [18.1, 22.8, 23.9, 25.1, 25], color: '00ff00' } ] }, { title: 'Sample bar chart', renderType: 'bar', xmlOptions: { "c:title": { "c:tx": { "c:rich": { "a:p": { "a:r": { "a:t": "Override title via XML" } } } } } }, data: [ { name: 'europe', labels: ['Y2003', 'Y2004', 'Y2005'], values: [2.5, 2.6, 2.8], color: 'ff0000' }, { name: 'namerica', labels: ['Y2003', 'Y2004', 'Y2005'], values: [2.5, 2.7, 2.9], color: '00ff00' }, { name: 'asia', labels: ['Y2003', 'Y2004', 'Y2005'], values: [2.1, 2.2, 2.4], color: '0000ff' }, { name: 'lamerica', labels: ['Y2003', 'Y2004', 'Y2005'], values: [0.3, 0.3, 0.3], color: 'ffff00' }, { name: 'meast', labels: ['Y2003', 'Y2004', 'Y2005'], values: [0.2, 0.3, 0.3], color: 'ff00ff' }, { name: 'africa', labels: ['Y2003', 'Y2004', 'Y2005'], values: [0.1, 0.1, 0.1], color: '00ffff' } ] }, { title: 'Group bar chart', renderType: 'group-bar', data: [ { name: 'europe', labels: ['Y2003', 'Y2004', 'Y2005'], values: [2.5, 2.6, 2.8], color: 'ff0000' }, { name: 'namerica', labels: ['Y2003', 'Y2004', 'Y2005'], values: [2.5, 2.7, 2.9], color: '00ff00' }, { name: 'asia', labels: ['Y2003', 'Y2004', 'Y2005'], values: [2.1, 2.2, 2.4], color: '0000ff' }, { name: 'lamerica', labels: ['Y2003', 'Y2004', 'Y2005'], values: [0.3, 0.3, 0.3], color: 'ffff00' }, { name: 'meast', labels: ['Y2003', 'Y2004', 'Y2005'], values: [0.2, 0.3, 0.3], color: 'ff00ff' }, { name: 'africa', labels: ['Y2003', 'Y2004', 'Y2005'], values: [0.1, 0.1, 0.1], color: '00ffff' } ] } ]; function generateOneChart(chartInfo, callback) { slide = pptx.makeNewSlide(); slide.name = 'OfficeChart slide'; slide.back = 'ffffff'; slide.addChart(chartInfo, null, callback, callback); } function generateCharts(callback) { async.each(chartsData, generateOneChart, callback); } function generateSlideWithHyperlink(callback) { } function generateExampleSlides(callback) { // do the rest things here console.log('finalize'); // Let's create a new slide: slide = pptx.makeNewSlide(); slide.name = 'The first slide!'; // Change the background color: slide.back = '000000'; // Declare the default color to use on this slide: slide.color = 'ffffff'; // Basic way to add text string: slide.addText('Created using Officegen version ' + officegen.version); slide.addText('Fast position', 0, 20); slide.addText('Full line', 0, 40, '100%', 20); // Add text box with multi colors and fonts: slide.addText([ { text: 'Hello ', options: { font_size: 56 } }, { text: 'World!', options: { font_size: 56, font_face: 'Arial', color: 'ffff00' } } ], { cx: '75%', cy: 66, y: 150 }); // Please note that you can pass object as the text parameter to addText. // For a single text just pass a text string to addText: slide.addText('Office generator', { y: 66, x: 'c', cx: '50%', cy: 60, font_size: 48, color: '0000ff' }); pObj = slide.addText('Boom\nBoom!!!', { y: 100, x: 10, cx: '70%', font_face: 'Wide Latin', font_size: 54, color: 'cc0000', bold: true, underline: true }); pObj.options.y += 150; // 2nd slide: slide = pptx.makeNewSlide(); // For every color property (including the back color property) you can pass object instead of the color string: slide.back = { type: 'solid', color: '004400' }; pObj = slide.addText('Office generator', { y: 'c', x: 0, cx: '100%', cy: 66, font_size: 48, align: 'center', color: { type: 'solid', color: '008800' } }); pObj.setShadowEffect('outerShadow', { bottom: true, right: true }); slide = pptx.makeNewSlide(); slide.show = false; slide.addText('Red line', 'ff0000'); slide.addShape(pptx.shapes.OVAL, { fill: { type: 'solid', color: 'ff0000', alpha: 50 }, line: 'ffff00', y: 50, x: 50 }); slide.addText('Red box 1', { color: 'ffffff', fill: 'ff0000', line: 'ffff00', line_size: 5, y: 100, rotate: 45 }); slide.addShape(pptx.shapes.LINE, { line: '0000ff', y: 150, x: 150, cy: 0, cx: 300 }); slide.addShape(pptx.shapes.LINE, { line: '0000ff', y: 150, x: 150, cy: 100, cx: 0 }); slide.addShape(pptx.shapes.LINE, { line: '0000ff', y: 249, x: 150, cy: 0, cx: 300 }); slide.addShape(pptx.shapes.LINE, { line: '0000ff', y: 150, x: 449, cy: 100, cx: 0 }); slide.addShape(pptx.shapes.LINE, { line: '000088', y: 150, x: 150, cy: 100, cx: 300 }); slide.addShape(pptx.shapes.LINE, { line: '000088', y: 150, x: 150, cy: 100, cx: 300 }); slide.addShape(pptx.shapes.LINE, { line: '000088', y: 170, x: 150, cy: 100, cx: 300, line_head: 'triangle' }); slide.addShape(pptx.shapes.LINE, { line: '000088', y: 190, x: 150, cy: 100, cx: 300, line_tail: 'triangle' }); slide.addShape(pptx.shapes.LINE, { line: '000088', y: 210, x: 150, cy: 100, cx: 300, line_head: 'stealth', line_tail: 'stealth' }); pObj = slide.addShape(pptx.shapes.LINE); pObj.options.line = '008888'; pObj.options.y = 210; pObj.options.x = 150; pObj.options.cy = 100; pObj.options.cx = 300; pObj.options.line_head = 'stealth'; pObj.options.line_tail = 'stealth'; pObj.options.flip_vertical = true; slide.addText('Red box 2', { color: 'ffffff', fill: 'ff0000', line: 'ffff00', y: 350, x: 200, shape: pptx.shapes.ROUNDED_RECTANGLE, indentLevel: 1 }); slide = pptx.makeNewSlide(); slide.addImage(path.resolve(__dirname, 'images_for_examples/image1.png'), { y: 'c', x: 'c' }); slide = pptx.makeNewSlide(); slide.addImage(path.resolve(__dirname, 'images_for_examples/image2.jpg'), { y: 0, x: 0, cy: '100%', cx: '100%' }); slide = pptx.makeNewSlide(); slide.addImage(path.resolve(__dirname, 'images_for_examples/image3.png'), { y: 'c', x: 'c'}); slide = pptx.makeNewSlide(); slide.addImage(path.resolve(__dirname, 'images_for_examples/image2.jpg'), { y: 0, x: 0, cy: '100%', cx: '100%' }); slide = pptx.makeNewSlide(); slide.addImage(path.resolve(__dirname, 'images_for_examples/image2.jpg'), { y: 0, x: 0, cy: '100%', cx: '100%' }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_001.png'), { y: 10, x: 10 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_002.png'), { y: 10, x: 110 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_001.png'), { y: 110, x: 10 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_001.png'), { y: 110, x: 110 }); slide = pptx.makeNewSlide(); slide.addImage(path.resolve(__dirname, 'images_for_examples/image2.jpg'), { y: 0, x: 0, cy: '100%', cx: '100%' }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_001.png'), { y: 10, x: 10 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_002.png'), 110, 10); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_003.png'), { y: 10, x: 210 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_004.png'), { y: 110, x: 10 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_001.png'), { y: 110, x: 110 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_003.png'), { y: 110, x: 210 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_002.png'), { y: 210, x: 10 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_004.png'), { y: 210, x: 110 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_004.png'), { y: 210, x: 210 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_004.png'), { y: '310', x: 10 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_002.png'), { y: 310, x: 110 }); slide.addImage(path.resolve(__dirname, 'images_for_examples/sword_003.png'), { y: 310, x: 210 }); callback(); } function generateTable(callback) { slide = pptx.makeNewSlide(); var rows = []; for (var i = 0; i < 12; i++) { var row = []; for (var j = 0; j < 5; j++) { row.push("[" + i + "," + j + "]"); } rows.push(row); } slide.addTable(rows, {}); callback(); } function finalize() { var out = fs.createWriteStream('tmp/out2.pptx'); out.on('error', function (err) { console.log(err); }); pptx.generate(out); } async.series([ generateCharts // new , generateTable // new ,generateExampleSlides // inherited from original project ], finalize);