diff options
Diffstat (limited to 'presentation/plugin/print-pdf/print-pdf.js')
-rw-r--r-- | presentation/plugin/print-pdf/print-pdf.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/presentation/plugin/print-pdf/print-pdf.js b/presentation/plugin/print-pdf/print-pdf.js new file mode 100644 index 0000000..01e7109 --- /dev/null +++ b/presentation/plugin/print-pdf/print-pdf.js @@ -0,0 +1,66 @@ +/** + * phantomjs script for printing presentations to PDF. + * + * Example: + * phantomjs print-pdf.js "http://revealjs.com?print-pdf" reveal-demo.pdf + * + * @author Manuel Bieh (https://github.com/manuelbieh) + * @author Hakim El Hattab (https://github.com/hakimel) + * @author Manuel Riezebosch (https://github.com/riezebosch) + */ + +// html2pdf.js +var system = require('system'); + +var probePage = new WebPage(); +var printPage = new WebPage(); + +var inputFile = system.args[1] || 'index.html?print-pdf'; +var outputFile = system.args[2] || 'slides.pdf'; + +if (outputFile.match(/\.pdf$/gi) === null) { + outputFile += '.pdf'; +} + +console.log('Export PDF: Reading reveal.js config [1/4]'); + +probePage.open(inputFile, function (status) { + + console.log('Export PDF: Preparing print layout [2/4]'); + + var config = probePage.evaluate(function () { + return Reveal.getConfig(); + }); + + if (config) { + + printPage.paperSize = { + width: Math.floor(config.width * (1 + config.margin)), + height: Math.floor(config.height * (1 + config.margin)), + border: 0 + }; + + printPage.open(inputFile, function (status) { + console.log('Export PDF: Preparing pdf [3/4]'); + printPage.evaluate(function () { + Reveal.isReady() ? window.callPhantom() : Reveal.addEventListener('pdf-ready', window.callPhantom); + }); + }); + + printPage.onCallback = function (data) { + // For some reason we need to "jump the queue" for syntax highlighting to work. + // See: http://stackoverflow.com/a/3580132/129269 + setTimeout(function () { + console.log('Export PDF: Writing file [4/4]'); + printPage.render(outputFile); + console.log('Export PDF: Finished successfully!'); + phantom.exit(); + }, 0); + }; + } else { + + console.log('Export PDF: Unable to read reveal.js config. Make sure the input address points to a reveal.js page.'); + phantom.exit(1); + + } +}); |