aboutsummaryrefslogtreecommitdiffhomepage
path: root/presentation/plugin/print-pdf/print-pdf.js
diff options
context:
space:
mode:
Diffstat (limited to 'presentation/plugin/print-pdf/print-pdf.js')
-rw-r--r--presentation/plugin/print-pdf/print-pdf.js66
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);
+
+ }
+});