-
-
Save pedro-valentim/b055be90cddc6f6f3b596d5e5e21580f to your computer and use it in GitHub Desktop.
Export slides from Google Slides as SVG - Console Script (Chrome tested)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 :) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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