Skip to content

Instantly share code, notes, and snippets.

@pedro-valentim
Forked from diverted247/README
Last active May 25, 2020 00:50
Show Gist options
  • Save pedro-valentim/b055be90cddc6f6f3b596d5e5e21580f to your computer and use it in GitHub Desktop.
Save pedro-valentim/b055be90cddc6f6f3b596d5e5e21580f to your computer and use it in GitHub Desktop.
Export slides from Google Slides as SVG - Console Script (Chrome tested)
To export SVG from Google Slides.
1. Open Slide deck.
2. View -> 100%
3. Paste the export.js in the console.
4. Make sure to allow multiple downloads.
5. Respond the prompt with anything and click Ok. All SVG should be in Downloads folder.
Cheers,
Ted :)
(async function(){
function paddy(num, padlen, padchar) {
var pad_char = typeof padchar !== 'undefined' ? padchar : '0';
var pad = new Array(1 + padlen).join(pad_char);
return (pad + num).slice(-pad.length);
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function next(awaitTime) {
let event = document.createEvent("KeyboardEvent");
event.initKeyEvent ('keydown', null, false, null, false, false, false, false, 34, 'PageDown');
document.getElementsByTagName('body')[0].dispatchEvent(event);
await sleep(awaitTime);
}
function savexml(data , filename) {
var blob = new Blob( [ data ] , { type: 'text/xml' } );
var e = document.createEvent( 'MouseEvents' );
var a = document.createElement( 'a' );
a.download = filename;
a.href = window.URL.createObjectURL( blob );
a.dataset.downloadurl = [ 'text/json' , a.download , a.href ].join( ':' );
e.initMouseEvent( 'click' , true , false , window , 0 , 0 , 0 , 0 , 0 , false , false , false , false , 0 , null );
a.dispatchEvent( e );
}
async function loadall(_offset) {
let offset = _offset || 0;
let svgThumbs = document.getElementsByClassName('punch-filmstrip-thumbnails')[0];
let thumbsLength = svgThumbs.getElementsByClassName('punch-filmstrip-thumbnail').length;
for (let i = offset; i < thumbsLength; i++) {
await next();
svgThumbs.parentElement.scrollTo({'top': svgThumbs.parentElement.scrollTopMax});
thumbsLength = svgThumbs.getElementsByClassName('punch-filmstrip-thumbnail').length;
}
// svgThumbs = document.getElementsByClassName('punch-filmstrip-thumbnails')[0];
// let newThumbsLength = svgThumbs.getElementsByClassName('punch-filmstrip-thumbnail').length + 1;
// if (newThumbsLength > thumbsLength) {
// }
}
async function saveall() {
// loadall
var list = document.getElementById( 'pages' ).children;
//prep viewBox and svg element
//resize based on viewbox and initial transform
//google slides keeps transform for view in first <g> element
var x = list[0].getElementsByTagName('g')[0].transform.baseVal[0].matrix.e;
var y = list[0].getElementsByTagName('g')[0].transform.baseVal[0].matrix.f;
var w = list[0].viewBox.baseVal.width - x*2;
var h = list[0].viewBox.baseVal.height - y*2;
var viewbox = x + ' ' + y + ' ' + w + ' ' + h;
var header = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" fill-rule="evenodd" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" overflow="hidden" viewBox="' + viewbox + '">';
var len = list.length;
var maxDigits = `${len}`.length;
var i = 0;
while(i < len ){
savexml( header + list[i].innerHTML + '</svg>' , paddy(i+1, maxDigits, '0') + '.svg' );
await sleep(1000);
i++;
}
}
await loadall();
if (prompt(`continue? saving ${document.getElementById( 'pages' ).children.length} files...`)) {
await saveall();
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment