UNPKG

pptxgenjs

Version:

JavaScript library that creates PowerPoint presentations

859 lines (756 loc) 118 kB
/** * NAME: pptxgenjs-demo.js * AUTH: Brent Ely (https://github.com/gitbrent/) * DESC: Common test/demo slides for all library features * DEPS: Loaded by `pptxgenjs-demo.js` and `nodejs-demo.js` * VER.: 2.3.0 * BLD.: 20180809 */ // Detect Node.js (NODEJS is ultimately used to determine how to save: either `fs` or web-based, so using fs-detection is perfect) var NODEJS = false; { // NOTE: `NODEJS` determines which network library to use, so using fs-detection is apropos. if ( typeof module !== 'undefined' && module.exports && typeof require === 'function' ) { try { require.resolve('fs'); NODEJS = true; } catch (ex) { NODEJS = false; } } } if (NODEJS) { var LOGO_STARLABS; } // Constants var CUST_NAME = 'S.T.A.R. Laboratories'; var USER_NAME = 'Barry Allen'; var COLOR_RED = 'FF0000'; var COLOR_AMB = 'F2AF00'; var COLOR_GRN = '7AB800'; var COLOR_CRT = 'AA0000'; var COLOR_BLU = '0088CC'; var COLOR_UNK = 'A9A9A9'; var ARRSTRBITES = [130]; var CHARSPERLINE = 130; // "Open Sans", 13px, 900px-colW = ~19 words/line ~130 chars/line // Lorem text / base64 images { // FYI: 3086 chars var gStrLoremIpsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin condimentum dignissim velit vel luctus. Donec feugiat ipsum quis tempus blandit. Donec mattis mauris vel est dictum interdum. Pellentesque imperdiet nibh vitae porta ornare. Fusce non nisl lacus. Curabitur ut mattis dui. Ut pulvinar urna velit, vitae aliquam neque pulvinar eu. Fusce eget tellus eu lorem finibus mattis. Nunc blandit consequat arcu. Ut sed pharetra tortor, nec finibus ipsum. Pellentesque a est vitae ligula imperdiet rhoncus. Ut quis hendrerit tellus. Phasellus non malesuada mi. Suspendisse ullamcorper tristique odio fermentum elementum. Phasellus mattis mollis mauris, non mattis ligula dapibus quis. Quisque pretium metus massa. Curabitur condimentum consequat felis, id rutrum velit cursus vel. Proin nulla est, posuere in velit at, faucibus dignissim diam. Quisque quis erat euismod, malesuada erat eu, congue nisi. Ut risus lectus, auctor at libero sit amet, accumsan ultricies est. Donec eget iaculis enim. Nunc ac egestas tellus, nec efficitur magna. Sed nec nisl ut augue laoreet sollicitudin vitae nec quam. Vestibulum pretium nisl bibendum, tempor velit eu, semper velit. Nulla facilisi. Aenean quis purus sagittis, dapibus nibh eget, ornare nunc. Donec posuere erat quis ipsum facilisis, quis porttitor dui cursus. Etiam convallis arcu sapien, vitae placerat diam molestie sit amet. Vivamus sapien augue, porta sed tortor ut, molestie ornare nisl. Nullam sed mi turpis. Donec sed finibus risus. Nunc interdum semper mauris quis vehicula. Phasellus in nisl faucibus, pellentesque massa vel, faucibus urna. Proin sed tortor lorem. Curabitur eu nisi semper, placerat tellus sed, varius nulla. Etiam luctus ac purus nec aliquet. Phasellus nisl metus, dictum ultricies justo a, laoreet consectetur risus. Vestibulum vulputate in felis ac blandit. Aliquam erat volutpat. Sed quis ultrices lectus. Curabitur at scelerisque elit, a bibendum nisi. Integer facilisis ex dolor, vel gravida metus vestibulum ac. Aliquam condimentum fermentum rhoncus. Nunc tortor arcu, condimentum non ex consequat, porttitor maximus est. Duis semper risus odio, quis feugiat sem elementum nec. Nam mattis nec dui sit amet volutpat. Sed facilisis, nunc quis porta consequat, ante mi tincidunt massa, eget euismod sapien nunc eget sem. Curabitur orci neque, eleifend at mattis quis, malesuada ac nibh. Vestibulum sed laoreet dolor, ac facilisis urna. Vestibulum luctus id nulla at auctor. Nunc pharetra massa orci, ut pharetra metus faucibus eget. Etiam eleifend, tellus id lobortis molestie, sem magna elementum dui, dapibus ullamcorper nisl enim ac urna. Nam posuere ullamcorper tellus, ac blandit nulla vestibulum nec. Vestibulum ornare, ligula quis aliquet cursus, metus nisi congue nulla, vitae posuere elit mauris at justo. Nullam ut fermentum arcu, nec laoreet ligula. Morbi quis consectetur nisl, nec consectetur justo. Curabitur eget eros hendrerit, ullamcorper dolor non, aliquam elit. Aliquam mollis justo vel aliquam interdum. Aenean bibendum rhoncus ante a commodo. Vestibulum bibendum sapien a accumsan pharetra... Curabitur condimentum consequat felis, id rutrum velit cursus vel. Proin nulla est, posuere in velit at, faucibus dignissim diam. Quisque quis erat euismod, malesuada erat eu, congue nisi. Ut risus lectus, auctor at libero sit amet, accumsan ultricies est. Donec eget iaculis enim. Nunc ac egestas tellus, nec efficitur magna. Sed nec nisl ut augue laoreet sollicitudin vitae nec quam. Vestibulum pretium nisl bibendum, tempor velit eu, semper velit. Nulla facilisi. Aenean quis purus sagittis, dapibus nibh eget, ornare nunc. Donec posuere erat quis ipsum facilisis, quis porttitor dui cursus. Etiam convallis arcu sapien, vitae placerat diam molestie sit amet. Vivamus sapien augue, porta sed tortor ut, molestie ornare nisl. Nullam sed mi turpis. Donec sed finibus risus. Nunc interdum semper mauris quis vehicula. Phasellus in nisl faucibus, pellentesque massa vel, faucibus urna. Proin sed tortor lorem. Curabitur eu nisi semper, placerat tellus sed, varius nulla. Etiam luctus ac purus nec aliquet. Phasellus nisl metus, dictum ultricies justo a, laoreet consectetur risus. Vestibulum vulputate in felis ac blandit. Aliquam erat volutpat. Sed quis ultrices lectus. Curabitur at scelerisque elit, a bibendum nisi. Integer facilisis ex dolor, vel gravida metus vestibulum ac. Aliquam condimentum fermentum rhoncus. Nunc tortor arcu, condimentum non ex consequat, porttitor maximus est. Duis semper risus odio, quis feugiat sem elementum nec. Nam mattis nec dui sit amet volutpat. Sed facilisis, nunc quis porta consequat, ante mi tincidunt massa, eget euismod sapien nunc eget sem. Curabitur orci neque, eleifend at mattis quis, malesuada ac nibh. Vestibulum sed laoreet dolor, ac facilisis urna. Vestibulum luctus id nulla at auctor. Nunc pharetra massa orci, ut pharetra metus faucibus eget. Etiam eleifend, tellus id lobortis molestie, sem magna elementum dui, dapibus ullamcorper nisl enim ac urna. Nam posuere ullamcorper tellus, ac blandit nulla vestibulum nec. Vestibulum ornare, ligula quis aliquet cursus, metus nisi congue nulla, vitae posuere elit mauris at justo. Nullam ut fermentum arcu, nec laoreet ligula. Morbi quis consectetur nisl, nec consectetur justo. Curabitur eget eros hendrerit, ullamcorper dolor non, aliquam elit. Aliquam mollis justo vel aliquam interdum. Aenean bibendum rhoncus ante a commodo. Vestibulum bibendum sapien a accumsan pharetra.'; // Pre-Encoded (base64) images (if any) var checkGreen = 'data:image/png;base64,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'; var starlabsLogoSml = 'data:image/png;base64,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'; } var gArrNamesF = ['Markiplier','Jack','Brian','Paul','Ev','Ann','Michelle','Jenny','Lara','Kathryn']; var gArrNamesL = ['Johnson','Septiceye','Lapston','Lewis','Clark','Griswold','Hart','Cube','Malloy','Capri']; var gStrHello = 'BONJOUR - CIAO - GUTEN TAG - HELLO - HOLA - NAMASTE - OLÀ - ZDRAS-TVUY-TE - こんにちは - 你好'; var gOptsTabOpts = { x:0.4, y:0.13, w:12.5, colW:[9,3.5] }; var gOptsTextL = { color:'9F9F9F', margin:3, border:[0,0,{pt:'1',color:'CFCFCF'},0] }; var gOptsOptsR = { color:'9F9F9F', margin:3, border:[0,0,{pt:'1',color:'CFCFCF'},0], align:'right' }; var gOptsTextR = { text:'PptxGenJS', options:gOptsOptsR }; var gOptsSubTitle = { x:0.5, y:0.7, w:4, h:0.3, fontSize:18, fontFace:'Arial', color:'0088CC', fill:'FFFFFF' }; var gDemoTitleText = { fontSize:14, color:'0088CC', bold:true }; var gDemoTitleOpts = { fontSize:13, color:'9F9F9F' }; var gPaths = { 'starlabsBkgd': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/images/starlabs_bkgd.jpg' }, 'starlabsLogo': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/images/starlabs_logo.png' }, 'wikimedia1': { path:'https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg' }, 'wikimedia2': { path:'https://upload.wikimedia.org/wikipedia/commons/1/17/PNG-Gradient_hex.png' }, 'ccCopyRemix': { path:'https://cdn.rawgit.com/gitbrent/PptxGenJS/v2.1.0/examples/images/cc_copyremix.gif' }, 'ccLicenseComp': { path:'../SiteAssets/pptxgenjs/examples/images/cc_license_comp.png' }, 'ccLogo': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/images/cc_logo.jpg' }, 'animCampfire': { path:'https://cdn.rawgit.com/gitbrent/PptxGenJS/v2.1.0/examples/images/anim_campfire.gif' }, 'sample_avi': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/media/sample.avi' }, 'sample_m4v': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/media/sample.m4v' }, 'sample_mov': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/master/examples/media/sample.mov' }, 'sample_mp4': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/media/sample.mp4' }, 'sample_mpg': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/media/sample.mpg' }, 'sample_mp3': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/media/sample.mp3' }, 'sample_wav': { path:'https://raw.githubusercontent.com/gitbrent/PptxGenJS/v2.1.0/examples/media/sample.wav' } } // ================================================================================================================== function getTimestamp() { var dateNow = new Date(); var dateMM = dateNow.getMonth() + 1; dateDD = dateNow.getDate(); dateYY = dateNow.getFullYear(), h = dateNow.getHours(); m = dateNow.getMinutes(); return dateNow.getFullYear() +''+ (dateMM<=9 ? '0' + dateMM : dateMM) +''+ (dateDD<=9 ? '0' + dateDD : dateDD) + (h<=9 ? '0' + h : h) + (m<=9 ? '0' + m : m); } // ================================================================================================================== function runEveryTest() { execGenSlidesFuncs( ['Master', 'Chart', 'Image', 'Media', 'Shape', 'Text', 'Table'] ); // Dont run this automatically as Html2Pptx needs table to be visible as of 2.2.0 // if ( typeof table2slides1 !== 'undefined' ) table2slides1(); } function execGenSlidesFuncs(type) { // STEP 1: Instantiate new PptxGenJS object var pptx; if ( NODEJS ) { var PptxGenJsLib; var fs = require('fs'); if (fs.existsSync('../dist/pptxgen.js')) { PptxGenJsLib = require('../dist/pptxgen.js'); // for LOCAL TESTING } else { PptxGenJsLib = require("pptxgenjs"); } pptx = new PptxGenJsLib(); var base64Images = require('./images/base64Images.js'); LOGO_STARLABS = base64Images.LOGO_STARLABS(); } else { pptx = new PptxGenJS(); } if (console.log) console.log(' * pptxgenjs ver: '+ pptx.version); // Loaded okay? // STEP 2: Set Presentation props (as QA test only - these are not required) pptx.setAuthor('Brent Ely'); pptx.setCompany(CUST_NAME); pptx.setRevision('15'); pptx.setSubject('PptxGenJS Test Suite Export'); pptx.setTitle('PptxGenJS Test Suite Presentation'); // STEP 3: Set layout pptx.setLayout('LAYOUT_WIDE'); // STEP 4: Create Master Slides (from the old `pptxgen.masters.js` file - `gObjPptxMasters` items) { var objBkg = { path:(NODEJS ? gPaths.starlabsBkgd.path.replace(/http.+\/examples/, '../examples') : gPaths.starlabsBkgd.path) }; var objImg = { path:(NODEJS ? gPaths.starlabsLogo.path.replace(/http.+\/examples/, '../examples') : gPaths.starlabsLogo.path), x:4.6, y:3.5, w:4, h:1.8 }; // TITLE_SLIDE pptx.defineSlideMaster({ title: 'TITLE_SLIDE', bkgd: objBkg, objects: [ //{ 'line': { x:3.5, y:1.0, w:6.0, h:0.0, line:'0088CC', lineSize:5 } }, //{ 'chart': { type:'PIE', data:[{labels:['R','G','B'], values:[10,10,5]}], opts:{x:11.3, y:0.0, w:2, h:2, dataLabelFontSize:9} } }, //{ 'image': { x:11.3, y:6.4, w:1.67, h:0.75, data:starlabsLogoSml } }, { 'rect': { x: 0.0, y:5.7, w:'100%', h:0.75, fill:'F1F1F1' } }, { 'text': { text:'Global IT & Services :: Status Report', options:{ x:0.0, y:5.7, w:'100%', h:0.75, fontFace:'Arial', color:'363636', fontSize:20, align:'c', valign:'m', margin:0 } } } ] }); // MASTER_PLAIN pptx.defineSlideMaster({ title: 'MASTER_PLAIN', bkgd: 'FFFFFF', margin: [ 0.5, 0.25, 1.0, 0.25 ], objects: [ { 'rect': { x: 0.00, y:6.90, w:'100%', h:0.6, fill:'003b75' } }, { 'image': { x:11.45, y:5.95, w:1.67, h:0.75, data:starlabsLogoSml } }, { 'text': { options: {x:0, y:6.9, w:'100%', h:0.6, align:'c', valign:'m', color:'FFFFFF', fontSize:12}, text: 'S.T.A.R. Laboratories - Confidential' } } ], slideNumber: { x:0.6, y:7.1, color:'FFFFFF', fontFace:'Arial', fontSize:10 } }); // MASTER_SLIDE (MASTER_PLACEHOLDER) pptx.defineSlideMaster({ title: 'MASTER_SLIDE', bkgd: 'FFFFFF', margin: [ 0.5, 0.25, 1.0, 0.25 ], slideNumber: { x:0.6, y:7.1, color:'FFFFFF', fontFace:'Arial', fontSize:10 }, objects: [ { 'rect': { x: 0.00, y:6.90, w:'100%', h:0.6, fill:'003b75' } }, { 'image': { x:11.45, y:5.95, w:1.67, h:0.75, data:starlabsLogoSml } }, { 'text': { options: {x:0, y:6.9, w:'100%', h:0.6, align:'c', valign:'m', color:'FFFFFF', fontSize:12}, text: 'S.T.A.R. Laboratories - Confidential' } }, { 'placeholder': { options: { name:'title', type:'title', x:0.6, y:0.2, w:12, h:1.0 }, text: '' } }, { 'placeholder': { options: { name:'body', type:'body', x:0.6, y:1.5, w:12, h:5.25 }, text: '(supports custom placeholder text!)' } } ] }); // THANKS_SLIDE (THANKS_PLACEHOLDER) pptx.defineSlideMaster({ title: 'THANKS_SLIDE', bkgd: '36ABFF', objects: [ { 'rect': { x:0.0, y:3.4, w:'100%', h:2.0, fill:'ffffff' } }, { 'placeholder': { options:{ name:'thanksText', type:'title', x:0.0, y:0.9, w:'100%', h:1, fontFace:'Arial', color:'FFFFFF', fontSize:60, align:'c' } } }, { 'image': objImg }, { 'placeholder': { options: { name:'body', type:'body', x:0.0, y:6.45, w:'100%', h:1, fontFace:'Courier', color:'FFFFFF', fontSize:32, align:'c' }, text: '(add homepage URL)' } } ] }); // MISC: Only used for Issues, ad-hoc slides etc (for screencaps) pptx.defineSlideMaster({ title: 'DEMO_SLIDE', objects: [ { 'rect': { x:0.0, y:7.1, w:'100%', h:0.4, fill:'f1f1f1' } }, { 'text': { text:'PptxGenJS - JavaScript PowerPoint Library - (github.com/gitbrent/PptxGenJS)', options:{ x:0.0, y:7.1, w:'100%', h:0.4, color:'6c6c6c', fontSize:10, align:'c' } } } ] }); } // STEP 5: Run requested test var arrTypes = ( typeof type === 'string' ? [type] : type ); arrTypes.forEach(function(type,idx){ eval( 'genSlides_'+type+'(pptx)' ); }); // LAST: Export Presentation if ( NODEJS ) { pptx.save('PptxGenJS_Demo_Node_'+type+'_'+getTimestamp()); console.log('\nDemo file created:\n * '+'PptxGenJS_Demo_Node_'+type+'_'+getTimestamp()); } else { pptx.save('PptxGenJS_Demo_Browser_'+type+'_'+getTimestamp()); } } // ================================================================================================================== function genSlides_Table(pptx) { // SLIDE 1: Table text alignment and cell styles { var slide = pptx.addNewSlide(); slide.addNotes('API Docs:\nhttps://gitbrent.github.io/PptxGenJS/docs/api-tables.html'); slide.addTable( [ [{ text:'Table Examples 1', options:gOptsTextL },gOptsTextR] ], gOptsTabOpts ); // DEMO: align/valign ------------------------------------------------------------------------- var objOpts1 = { x:0.5, y:0.7, w:4, fontSize:18, fontFace:'Arial', color:'0088CC' }; slide.addText('Cell Text Alignment:', objOpts1); var arrTabRows = [ [ { text: 'Top Lft', options: { valign:'top', align:'left' , fontFace:'Arial' } }, { text: 'Top Ctr', options: { valign:'t' , align:'center', fontFace:'Courier' } }, { text: 'Top Rgt', options: { valign:'t' , align:'right' , fontFace:'Verdana' } } ], [ { text: 'Ctr Lft', options: { valign:'middle', align:'left' } }, { text: 'Ctr Ctr', options: { valign:'center', align:'ctr' } }, { text: 'Ctr Rgt', options: { valign:'c' , align:'r' } } ], [ { text: 'Btm Lft', options: { valign:'bottom', align:'l' } }, { text: 'Btm Ctr', options: { valign:'btm', align:'c' } }, { text: 'Btm Rgt', options: { valign:'b', align:'r' } } ] ]; slide.addTable( arrTabRows, { x:0.5, y:1.1, w:5.0, rowH:0.75, fill:'F7F7F7', fontSize:14, color:'363636', border:{pt:'1', color:'BBCCDD'} } ); // Pass default cell style as tabOpts, then just style/override individual cells as needed // DEMO: cell styles -------------------------------------------------------------------------- var objOpts2 = { x:6.0, y:0.7, w:4, fontSize:18, fontFace:'Arial', color:'0088CC' }; slide.addText('Cell Styles:', objOpts2); var arrTabRows = [ [ { text: 'White', options: { fill:'6699CC', color:'FFFFFF' } }, { text: 'Yellow', options: { fill:'99AACC', color:'FFFFAA' } }, { text: 'Pink', options: { fill:'AACCFF', color:'E140FE' } } ], [ { text: '12pt', options: { fill:'FF0000', fontSize:12 } }, { text: '20pt', options: { fill:'00FF00', fontSize:20 } }, { text: '28pt', options: { fill:'0000FF', fontSize:28 } } ], [ { text: 'Bold', options: { fill:'003366', bold:true } }, { text: 'Underline', options: { fill:'336699', underline:true } }, { text: '10pt Pad', options: { fill:'6699CC', margin:10 } } ] ]; slide.addTable( arrTabRows, { x:6.0, y:1.1, w:7.0, rowH:0.75, fill:'F7F7F7', color:'FFFFFF', fontSize:16, valign:'center', align:'ctr', border:{pt:'1', color:'FFFFFF'} } ); // DEMO: Row/Col Width/Heights ---------------------------------------------------------------- var objOpts3 = { x:0.5, y:3.6, fontSize:18, fontFace:'Arial', color:'0088CC' }; slide.addText('Row/Col Heights/Widths:', objOpts3); var arrTabRows = [ [ {text:'1x1'}, {text:'2x1'}, { text:'2.5x1' }, { text:'3x1' }, { text:'4x1' } ], [ {text:'1x2'}, {text:'2x2'}, { text:'2.5x2' }, { text:'3x2' }, { text:'4x2' } ] ]; slide.addTable( arrTabRows, { x:0.5, y:4.0, rowH: [1, 2], colW: [1, 2, 2.5, 3, 4], fill:'F7F7F7', color:'6c6c6c', fontSize:14, valign:'center', align:'ctr', border:{pt:'1', color:'BBCCDD'} } ); } // SLIDE 2: Table row/col-spans { var slide = pptx.addNewSlide(); slide.addNotes('API Docs: https://gitbrent.github.io/PptxGenJS/docs/api-tables.html'); // 2: Slide title slide.addTable([ [{ text:'Table Examples 2', options:gOptsTextL },gOptsTextR] ], { x:'4%', y:'2%', w:'95%', h:'4%' }); // QA: this table's x,y,w,h all using % // DEMO: Rowspans/Colspans ---------------------------------------------------------------- var optsSub = JSON.parse(JSON.stringify(gOptsSubTitle)); slide.addText('Colspans/Rowspans:', optsSub); var tabOpts1 = { x:0.5, y:1.1, w:'90%', h:2, fill:'F5F5F5', color:'3D3D3D', fontSize:16, border:{pt:4, color:'FFFFFF'}, align:'c', valign:'m' }; var arrTabRows1 = [ [ { text:'A1\nA2', options:{rowspan:2, fill:'99FFCC'} } ,{ text:'B1' } ,{ text:'C1 -> D1', options:{colspan:2, fill:'99FFCC'} } ,{ text:'E1' } ,{ text:'F1\nF2\nF3', options:{rowspan:3, fill:'99FFCC'} } ] ,[ 'B2', 'C2', 'D2', 'E2' ] ,[ 'A3', 'B3', 'C3', 'D3', 'E3' ] ]; // NOTE: Follow HTML conventions for colspan/rowspan cells - cells spanned are left out of arrays - see above // The table above has 6 columns, but each of the 3 rows has 4-5 elements as colspan/rowspan replacing the missing ones // (e.g.: there are 5 elements in the first row, and 6 in the second) slide.addTable( arrTabRows1, tabOpts1 ); var tabOpts2 = { x:0.5, y:3.3, w:12.4, h:1.5, fontSize:14, fontFace:'Courier', align:'center', valign:'middle', fill:'F9F9F9', border:{pt:'1',color:'c7c7c7'}}; var arrTabRows2 = [ [ { text:'A1\n--\nA2', options:{rowspan:2, fill:'99FFCC'} }, { text:'B1\n--\nB2', options:{rowspan:2, fill:'99FFCC'} }, { text:'C1 -> D1', options:{colspan:2, fill:'9999FF'} }, { text:'E1 -> F1', options:{colspan:2, fill:'9999FF'} }, 'G1' ], [ 'C2','D2','E2','F2','G2' ] ]; slide.addTable( arrTabRows2, tabOpts2 ); var tabOpts3 = {x:0.5, y:5.15, w:6.25, h:2, margin:0.25, align:'center', valign:'middle', fontSize:16, border:{pt:'1',color:'c7c7c7'}, fill:'F1F1F1' } var arrTabRows3 = [ [ {text:'A1\nA2\nA3', options:{rowspan:3, fill:'FFFCCC'}}, {text:'B1\nB2', options:{rowspan:2, fill:'FFFCCC'}}, 'C1' ], [ 'C2' ], [ { text:'B3 -> C3', options:{colspan:2, fill:'99FFCC'} } ] ]; slide.addTable(arrTabRows3, tabOpts3); var tabOpts4 = {x:7.4, y:5.15, w:5.5, h:2, margin:0, align:'center', valign:'middle', fontSize:16, border:{pt:'1',color:'c7c7c7'}, fill:'F2F9FC' } var arrTabRows4 = [ [ 'A1', {text:'B1\nB2', options:{rowspan:2, fill:'FFFCCC'}}, {text:'C1\nC2\nC3', options:{rowspan:3, fill:'FFFCCC'}} ], [ 'A2' ], [ { text:'A3 -> B3', options:{colspan:2, fill:'99FFCC'} } ] ]; slide.addTable(arrTabRows4, tabOpts4); } // SLIDE 3: Super rowspan/colspan demo { var slide = pptx.addNewSlide(); slide.addNotes('API Docs: https://gitbrent.github.io/PptxGenJS/docs/api-tables.html'); slide.addTable( [ [{ text:'Table Examples 3', options:gOptsTextL },gOptsTextR] ], gOptsTabOpts ); // DEMO: Rowspans/Colspans ---------------------------------------------------------------- var optsSub = JSON.parse(JSON.stringify(gOptsSubTitle)); slide.addText('Extreme Colspans/Rowspans:', optsSub); var optsRowspan2 = {rowspan:2, fill:'99FFCC'}; var optsRowspan3 = {rowspan:3, fill:'99FFCC'}; var optsRowspan4 = {rowspan:4, fill:'99FFCC'}; var optsRowspan5 = {rowspan:5, fill:'99FFCC'}; var optsColspan2 = {colspan:2, fill:'9999FF'}; var optsColspan3 = {colspan:3, fill:'9999FF'}; var optsColspan4 = {colspan:4, fill:'9999FF'}; var optsColspan5 = {colspan:5, fill:'9999FF'}; var arrTabRows5 = [ [ 'A1','B1','C1','D1','E1','F1','G1','H1', { text:'I1\n-\nI2\n-\nI3\n-\nI4\n-\nI5', options:optsRowspan5 }, { text:'J1 -> K1 -> L1 -> M1 -> N1', options:optsColspan5 } ], [ { text:'A2\n--\nA3', options:optsRowspan2 }, { text:'B2 -> C2 -> D2', options:optsColspan3 }, { text:'E2 -> F2', options:optsColspan2 }, { text:'G2\n-\nG3\n-\nG4', options:optsRowspan3 }, 'H2', 'J2','K2','L2','M2','N2' ], [ { text:'B3\n-\nB4\n-\nB5', options:optsRowspan3 }, 'C3','D3','E3','F3', 'H3', 'J3','K3','L3','M3','N3' ], [ { text:'A4\n--\nA5', options:optsRowspan2 }, { text:'C4 -> D4 -> E4 -> F4', options:optsColspan4 }, 'H4', { text:'J4 -> K4 -> L4', options:optsColspan3 }, { text:'M4\n--\nM5', options:optsRowspan2 }, { text:'N4\n--\nN5', options:optsRowspan2 }, ], [ 'C5','D5','E5','F5', { text:'G5 -> H5', options:{colspan:2, fill:'9999FF'} }, 'J5','K5','L5' ] ]; var taboptions5 = { x:0.6, y:1.3, w:'90%', h:5.5, margin:0, fontSize:14, align:'c', valign:'m', border:{pt:'1'} }; slide.addTable(arrTabRows5, taboptions5); } // SLIDE 4: Cell Formatting / Cell Margins { var slide = pptx.addNewSlide(); slide.addNotes('API Docs: https://gitbrent.github.io/PptxGenJS/docs/api-tables.html'); // 2: Slide title slide.addTable( [ [{ text:'Table Examples 4', options:gOptsTextL },gOptsTextR] ], gOptsTabOpts ); // Cell Margins var optsSub = JSON.parse(JSON.stringify(gOptsSubTitle)); slide.addText('Cell Margins:', optsSub); slide.addTable( [['margin:0']], { x:0.5, y:1.1, margin:0, w:1.2, fill:'FFFCCC' } ); slide.addTable( [['margin:[0,0,0,20]']], { x:2.5, y:1.1, margin:[0,0,0,20], w:2.0, fill:'FFFCCC', align:'r' } ); slide.addTable( [['margin:5']], { x:5.5, y:1.1, margin:5, w:1.0, fill:'F1F1F1' } ); slide.addTable( [['margin:[40,5,5,20]']], { x:7.5, y:1.1, margin:[40,5,5,20], w:2.2, fill:'F1F1F1' } ); slide.addTable( [['margin:[80,5,5,10]']], { x:10.5,y:1.1, margin:[80,5,5,10], w:2.2, fill:'F1F1F1' } ); slide.addTable( [{text:'number zero:', options:{margin:5}}, {text:0, options:{margin:5}}], { x:0.5, y:1.9, w:3, fill:'f2f9fc', border:'none', colW:[2,1] } ); slide.addTable( [{text:'text-obj margin:0', options:{margin:0}}], { x:4.0, y:1.9, w:2, fill:'f2f9fc' } ); // Test margin option when using both plain and text object cells var arrTextObjects = [ ['Plain text','Cell 2',3], [ { text:'Text Objects', options:{ color:'99ABCC', align:'r' } }, { text:'2nd cell', options:{ color:'0000EE', align:'c' } }, { text:3, options:{ color:'0088CC', align:'l' } } ] ]; slide.addTable( arrTextObjects, { x:0.5, y:2.7, w:12.25, margin:7, fill:'F1F1F1', border:{pt:1,color:'696969'} } ); // Complex/Compound border var optsSub = JSON.parse(JSON.stringify(gOptsSubTitle)); optsSub.y = 3.9; slide.addText('Complex Cell Border:', optsSub); var arrBorder = [ {color:'FF0000',pt:1}, {color:'00ff00',pt:3}, {color:'0000ff',pt:5}, {color:'9e9e9e',pt:7} ]; slide.addTable( [['Borders!']], { x:0.5, y:4.3, w:12.3, rowH:1.5, fill:'F5F5F5', color:'3D3D3D', fontSize:18, border:arrBorder, align:'c', valign:'c' } ); // Invalid char check var optsSub = JSON.parse(JSON.stringify(gOptsSubTitle)); optsSub.y = 6.1; slide.addText('Escaped Invalid Chars:', optsSub); var arrTabRows3 = [['<', '>', '"', "'", '&', 'plain']]; slide.addTable( arrTabRows3, { x:0.5, y:6.5, w:12.3, rowH:0.5, fill:'F5F5F5', color:'3D3D3D', border:'FFFFFF', align:'c', valign:'c' } ); } // SLIDE 5: Cell Word-Level Formatting { var slide = pptx.addNewSlide(); slide.addNotes('API Docs: https://gitbrent.github.io/PptxGenJS/docs/api-tables.html'); slide.addTable( [ [{ text:'Table Examples 5', options:gOptsTextL },gOptsTextR] ], gOptsTabOpts ); slide.addText( 'The following textbox and table cell use the same array of text/options objects, making word-level formatting familiar and consistent across the library.', { x:0.5, y:0.5, w:'95%', h:0.5, margin:0.1, fontSize:14 } ); slide.addText("[\n" + " { text:'1st line', options:{ fontSize:24, color:'99ABCC', align:'r', breakLine:true } },\n" + " { text:'2nd line', options:{ fontSize:36, color:'FFFF00', align:'c', breakLine:true } },\n" + " { text:'3rd line', options:{ fontSize:48, color:'0088CC', align:'l' } }\n" + "]", { x:1, y:1.1, w:11, h:1.5, margin:0.1, fontFace:'Courier', fontSize:14, fill:'F1F1F1', color:'333333' } ); // Textbox: Text word-level formatting slide.addText('Textbox:', { x:1, y:2.8, w:3, fontSize:18, fontFace:'Arial', color:'0088CC' }); var arrTextObjects = [ { text:'1st line', options:{ fontSize:24, color:'99ABCC', align:'r', breakLine:true } }, { text:'2nd line', options:{ fontSize:36, color:'FFFF00', align:'c', breakLine:true } }, { text:'3rd line', options:{ fontSize:48, color:'0088CC', align:'l' } } ]; slide.addText( arrTextObjects, { x:2.5, y:2.8, w:9, h:2, margin:0.1, fill:'232323' } ); // Table cell: Use the exact same code from addText to do the same word-level formatting within a cell slide.addText('Table:', { x:1, y:5, w:3, fontSize:18, fontFace:'Arial', color:'0088CC' }); var opts2 = { x:2.5, y:5, w:9, h:2, align:'center', valign:'middle', colW:[1.5,1.5,6], border:{pt:'1'}, fill:'F1F1F1' } var arrTabRows = [ [ { text:'Cell 1A', options:{fontFace:'Arial' } }, { text:'Cell 1B', options:{fontFace:'Courier'} }, { text: arrTextObjects, options:{fill:'232323' } } ] ]; slide.addTable(arrTabRows, opts2); } // SLIDE 6: Cell Word-Level Formatting { var slide = pptx.addNewSlide(); slide.addNotes('API Docs: https://gitbrent.github.io/PptxGenJS/docs/api-tables.html'); slide.addTable( [ [{ text:'Table Examples 6', options:gOptsTextL },gOptsTextR] ], gOptsTabOpts ); var optsSub = JSON.parse(JSON.stringify(gOptsSubTitle)); slide.addText('Table Cell Word-Level Formatting:', optsSub); // EX 1: var arrCell1 = [{ text:'Cell 1A', options:{ color:'0088cc' } }]; var arrCell2 = [{ text:'Red ', options:{color:'FF0000'} }, { text:'Green ', options:{color:'00FF00'} }, { text:'Blue', options:{color:'0000FF'} }]; var arrCell3 = [{ text:'Bullets\nBullets\nBullets', options:{ color:'0088cc', bullet:true } }]; var arrCell4 = [{ text:'Numbers\nNumbers\nNumbers', options:{ color:'0088cc', bullet:{type:'number'} } }]; var arrTabRows = [ [{ text:arrCell1 }, { text:arrCell2, options:{valign:'m'} }, { text:arrCell3, options:{valign:'m'} }, { text:arrCell4, options:{valign:'b'} }] ]; slide.addTable( arrTabRows, { x:0.6, y:1.25, w:12, h:3, fontSize:24, border:{pt:'1'}, fill:'F1F1F1' } ); // EX 2: slide.addTable( [ { text:[ { text:'I am a text object with bullets ', options:{color:'CC0000', bullet:{code:'2605'}} }, { text:'and i am the next text object' , options:{color:'00CD00', bullet:{code:'25BA'}} }, { text:'Final text object w/ bullet:true', options:{color:'0000AB', bullet:true} } ]}, { text:[ { text:'Cell', options:{fontSize:36, align:'l', breakLine:true} }, { text:'#2', options:{fontSize:60, align:'r', color:'CD0101'} } ]}, { text:[ { text:'Cell', options:{fontSize:36, fontFace:'Courier', color:'dd0000', breakLine:true} }, { text:'#' , options:{fontSize:60, color:'8648cd'} }, { text:'3' , options:{fontSize:60, color:'33ccef'} } ]} ], { x:0.6, y:4.75, w:12, h:2, fontSize:24, colW:[8,2,2], valign:'m', border:{pt:'1'}, fill:'F1F1F1' } ); } // SLIDE 7+: Table auto-paging // ======== ----------------------------------------------------------------------------------- { var arrRows = []; var arrText = []; for (var idx=0; idx<gArrNamesF.length; idx++) { var strText = ( idx == 0 ? gStrLoremIpsum.substring(0,100) : gStrLoremIpsum.substring(idx*100,idx*200) ); arrRows.push( [idx, gArrNamesF[idx], strText] ); arrText.push( [strText] ); } var slide = pptx.addNewSlide(); slide.addNotes('API Docs: https://gitbrent.github.io/PptxGenJS/docs/api-tables.html'); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'Auto-Paging Example', options:gDemoTitleOpts}], {x:0.5, y:0.13, w:'90%'} ); slide.addTable( arrRows, { x:0.5, y:0.6, colW:[0.75,1.75,10], margin:2, border:'CFCFCF' } ); var slide = pptx.addNewSlide(); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'Smaller Table Area', options:gDemoTitleOpts}], {x:0.5, y:0.13, w:'90%'} ); slide.addTable( arrRows, { x:3.0, y:0.6, colW:[0.75,1.75, 7], margin:5, border:'CFCFCF' } ); var slide = pptx.addNewSlide(); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'Test: Correct starting Y location upon paging', options:gDemoTitleOpts}], {x:0.5, y:0.13, w:'90%'} ); slide.addTable( arrRows, { x:3.0, y:4.0, colW:[0.75,1.75, 7], margin:5, border:'CFCFCF' } ); var slide = pptx.addNewSlide(); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'Test: `{ newPageStartY: 1.5 }`', options:gDemoTitleOpts}], {x:0.5, y:0.13, w:'90%'} ); slide.addTable( arrRows, { x:3.0, y:4.0, newPageStartY:1.5, colW:[0.75,1.75, 7], margin:5, border:'CFCFCF' } ); var slide = pptx.addNewSlide('MASTER_PLAIN', {bkgd:'CCFFCC'}); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'Master Page with Auto-Paging', options:gDemoTitleOpts}], {x:0.5, y:0.13, w:'90%'} ); slide.addTable( arrRows, { x:1.0, y:0.6, colW:[0.75,1.75, 7], margin:5, border:'CFCFCF' } ); var slide = pptx.addNewSlide(); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'Auto-Paging Disabled', options:gDemoTitleOpts}], {x:0.5, y:0.13, w:'90%'} ); slide.addTable( arrRows, { x:1.0, y:0.6, colW:[0.75,1.75, 7], margin:5, border:'CFCFCF', autoPage:false } ); // lineWeight option demos var slide = pptx.addNewSlide(); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'lineWeight:0', options:gDemoTitleOpts}], {x:0.5, y:0.13, w:3} ); slide.addTable( arrText, { x:0.50, y:0.6, w:4, margin:5, border:'CFCFCF', autoPage:true } ); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'lineWeight:0.5', options:gDemoTitleOpts}], {x:5.0, y:0.13, w:3} ); slide.addTable( arrText, { x:4.75, y:0.6, w:4, margin:5, border:'CFCFCF', autoPage:true, lineWeight:0.5 } ); slide.addText( [{text:'Table Examples: ', options:gDemoTitleText},{text:'lineWeight:-0.5', options:gDemoTitleOpts}], {x:9.0, y:0.13, w:3} ); slide.addTable( arrText, { x:9.10, y:0.6, w:4, margin:5, border:'CFCFCF', autoPage:true, lineWeight:-0.5 } ); } } function genSlides_Chart(pptx) { var LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); var MONS = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var QTRS = ['Q1','Q2','Q3','Q4']; var dataChartPieStat = [ { name : 'Project Status', labels: ['Red', 'Amber', 'Green', 'Unknown'], values: [8, 20, 30, 2] } ]; var dataChartPieLocs = [ { name : 'Location', labels: ['CN', 'DE', 'GB', 'MX', 'JP', 'IN', 'US'], values: [ 69, 35, 40, 85, 38, 99, 101] } ]; var arrDataLineStat = []; { var tmpObjRed = { name:'Red', labels:QTRS, values:[] }; var tmpObjAmb = { name:'Amb', labels:QTRS, values:[] }; var tmpObjGrn = { name:'Grn', labels:QTRS, values:[] }; var tmpObjUnk = { name:'Unk', labels:QTRS, values:[] }; for (var idy=0; idy<QTRS.length; idy++) { tmpObjRed.values.push( Math.floor(Math.random() * 30) + 1 ); tmpObjAmb.values.push( Math.floor(Math.random() * 50) + 1 ); tmpObjGrn.values.push( Math.floor(Math.random() * 80) + 1 ); tmpObjUnk.values.push( Math.floor(Math.random() * 10) + 1 ); } arrDataLineStat.push( tmpObjRed ); arrDataLineStat.push( tmpObjAmb ); arrDataLineStat.push( tmpObjGrn ); arrDataLineStat.push( tmpObjUnk ); } // Create a gap for testing `displayBlanksAs` in line charts (2.3.0) arrDataLineStat[2].values = [55, null, null, 55]; // SLIDE 1: Bar Chart ------------------------------------------------------------------ function slide1() { var slide = pptx.addNewSlide(); slide.addNotes('API Docs: https://gitbrent.github.io/PptxGenJS/docs/api-charts.html'); slide.addTable( [ [{ text:'Chart Examples: Bar Chart', options:gOptsTextL },gOptsTextR] ], gOptsTabOpts ); var arrDataRegions = [ { name : 'Region 1', labels: ['May', 'June', 'July', 'August'], values: [26, 53, 100, 75] }, { name : 'Region 2', labels: ['May', 'June', 'July', 'August'], values: [43.5, 70.3, 90.1, 80.05] } ]; var arrDataHighVals = [ { name : 'California', labels: ['Apartment', 'Townhome', 'Duplex', 'House', 'Big House'], values: [2000, 2800, 3200, 4000, 5000] }, { name : 'Texas', labels: ['Apartment', 'Townhome', 'Duplex', 'House', 'Big House'], values: [1400, 2000, 2500, 3000, 3800] } ]; // TOP-LEFT: H/bar var optsChartBar1 = { x:0.5, y:0.6, w:6.0, h:3.0, barDir: 'bar', border: { pt:'3', color:'00EE00' }, fill: 'F1F1F1', catAxisLabelColor : 'CC0000', catAxisLabelFontFace: 'Helvetica Neue', catAxisLabelFontSize: 14, catAxisOrientation : 'maxMin', titleColor : '33CF22', titleFontFace: 'Helvetica Neue', titleFontSize: 24 }; slide.addChart( pptx.charts.BAR, arrDataRegions, optsChartBar1 ); // TOP-RIGHT: V/col var optsChartBar2 = { x:7.0, y:0.6, w:6.0, h:3.0, barDir: 'col', catAxisLabelColor : '0000CC', catAxisLabelFontFace: 'Courier', catAxisLabelFontSize: 12, catAxisOrientation : 'minMax', dataBorder : { pt:'1', color:'F1F1F1' }, dataLabelColor : '696969', dataLabelFontFace : 'Arial', dataLabelFontSize : 11, dataLabelPosition : 'outEnd', dataLabelFormatCode: '#.0', showValue : true, valAxisOrientation: 'maxMin', showLegend: false, showTitle : false }; slide.addChart( pptx.charts.BAR, arrDataRegions, optsChartBar2 ); // BTM-LEFT: H/bar - TITLE and LEGEND slide.addText( '.', { x:0.5, y:3.8, w:6.0, h:3.5, fill:'F1F1F1', color:'F1F1F1'} ); var optsChartBar3 = { x:0.5, y:3.8, w:6.0, h:3.5, barDir : 'bar', border: { pt:'3', color:'CF0909' }, fill: 'F1C1C1', catAxisLabelColor : 'CC0000', catAxisLabelFontFace: 'Helvetica Neue', catAxisLabelFontSize: 14, catAxisOrientation : 'minMax', titleColor : '33CF22', titleFontFace: 'Helvetica Neue', titleFontSize: 16, showTitle : true, title: 'Sales by Region' }; slide.addChart( pptx.charts.BAR, arrDataHighVals, optsChartBar3 ); // BTM-RIGHT: V/col - TITLE and LEGEND slide.addText( '.', { x:7.0, y:3.8, w:6.0, h:3.5, fill:'F1F1F1', color:'F1F1F1'} ); var optsChartBar4 = { x:7.0, y:3.8, w:6.0, h:3.5, barDir: 'col', barGapWidthPct: 25, chartColors: ['0088CC', '99FFCC'], chartColorsOpacity: 50, valAxisMaxVal: 5000, catAxisLabelColor : '0000CC', catAxisLabelFontFace: 'Times', catAxisLabelFontSize: 11, catAxisOrientation : 'minMax', dataBorder : { pt:'1', color:'F1F1F1' }, dataLabelColor : 'FFFFFF', dataLabelFontFace : 'Arial', dataLabelFontSize : 10, dataLabelPosition : 'ctr', showValue : true, showLegend : true, legendPos : 't', legendColor: 'FF0000', showTitle : true, titleColor : 'FF0000', title : 'Red Title and Legend' }; slide.addChart( pptx.charts.BAR, arrDataHighVals, optsChartBar4 ); } // SLIDE 2: Bar Chart Grid/Axis Options ------------------------------------------------ function slide2() { var slide = pptx.addNewSlide(); slide.addNotes('API Docs: https://gitbrent.github.io/PptxGenJS/docs/api-charts.html'); slide.addTable( [ [{ text:'Chart Examples: Bar Chart Grid/Axis Options', options:gOptsTextL },gOptsTextR] ], gOptsTabOpts ); var arrDataRegions = [ { name : 'Region 1', labels: ['May', 'June', 'July', 'August'], values: [26, 53, 100, 75] }, { name : 'Region 2', labels: ['May', 'June', 'July', 'August'], values: [43.5, 70.3, 90.1, 80.05] } ]; var arrDataHighVals = [ { name : 'California', labels: ['Apartment', 'Townhome', 'Duplex', 'House', 'Big House'], values: [2000, 2800, 3200, 4000, 5000] }, { name : 'Texas', labels: ['Apartment', 'Townhome', 'Duplex', 'House', 'Big House'], values: [1400, 2000, 2500, 3000, 3800] } ]; // TOP-LEFT: H/bar var optsChartBar1 = { x:0.5, y:0.6, w:6.0, h:3.0, barDir: 'bar', fill: 'F1F1F1', catAxisLabelColor : 'CC0000', catAxisLabelFontFace: 'Helvetica Neue', catAxisLabelFontSize: 14, catGridLine: 'none', catAxisHidden: true, valGridLine: { color: "cc6699", style: "dash", size: 1 }, showLegend : true, title : 'No CatAxis, ValGridLine=dash', titleColor : 'a9a9a9', titleFontFace: 'Helvetica Neue', titleFontSize: 14, showTitle : true }; slide.addChart( pptx.charts.BAR, arrDataRegions, optsChartBar1 ); // TOP-RIGHT: V/col var optsChartBar2 = { x:7.0, y:0.6, w:6.0, h:3.0, barDir: 'col', fill: 'E1F1FF', dataBorder : { pt:'1', color:'F1F1F1' }, dataLabelColor : '696969', dataLabelFontFace : 'Arial', dataLabelFontSize : 11, dataLabelPosition : 'outEnd', dataLabelFormatCode: '#.0', showValue : true, catAxisHidden: true, catGridLine : 'none', valAxisHidden: true, valGridLine : 'none', showLegend: true, legendPos : 'b', showTitle : false }; slide.addChart( pptx.charts.BAR, arrDataRegions, optsChartBar2 ); // BTM-LEFT: H/bar - TITLE and LEGEND slide.addText( '.', { x:0.5, y:3.8, w:6.0, h:3.5, fill:'F1F1F1', color:'F1F1F1'} ); var optsChartBar3 = { x:0.5, y:3.8, w:6.0, h:3.5, barDir : 'bar', border: { pt:'3', color:'CF0909' }, fill: 'F1C1C1', catAxisLabelColor : 'CC0000', catAxisLabelFontFace: 'Helvetica Neue', catAxisLabelFo