From ddfb0aa86fdfc8e92d0b81fbe36dc79c4585dd86 Mon Sep 17 00:00:00 2001
From: Hakim El Hattab <hakim.elhattab@gmail.com>
Date: Sat, 26 Apr 2014 21:41:54 +0200
Subject: [PATCH] abide by configured width/height when printing to pdf

---
 css/print/pdf.css |  5 -----
 js/reveal.js      | 27 +++++++++++++++++++++------
 2 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/css/print/pdf.css b/css/print/pdf.css
index 559b05d..bc09a70 100644
--- a/css/print/pdf.css
+++ b/css/print/pdf.css
@@ -30,11 +30,6 @@ html {
 	overflow: visible;
 }
 
-@page {
-	size: letter landscape;
-	margin: 0;
-}
-
 /* SECTION 2: Remove any elements not needed in print.
    This would include navigation, ads, sidebars, etc. */
 .nestedarrow,
diff --git a/js/reveal.js b/js/reveal.js
index a203418..5dc6856 100644
--- a/js/reveal.js
+++ b/js/reveal.js
@@ -413,21 +413,19 @@ var Reveal = (function(){
 	 */
 	function setupPDF() {
 
-		// The aspect ratio of pages when saving to PDF in Chrome,
-		// we need to abide by this ratio when determining the pixel
-		// size of our pages
-		var pageAspectRatio = 1.295;
-
 		var slideSize = getComputedSlideSize( window.innerWidth, window.innerHeight );
 
 		// Dimensions of the PDF pages
 		var pageWidth = Math.round( slideSize.width * ( 1 + config.margin ) ),
-			pageHeight = Math.round( pageWidth / pageAspectRatio );
+			pageHeight = Math.round( slideSize.height * ( 1 + config.margin  ) );
 
 		// Dimensions of slides within the pages
 		var slideWidth = slideSize.width,
 			slideHeight = slideSize.height;
 
+		// Let the browser know what page size we want to print
+		injectStyleSheet( '@page{size:'+ pageWidth +'px '+ pageHeight +'px; margin: 0;}' );
+
 		document.body.classList.add( 'print-pdf' );
 		document.body.style.width = pageWidth + 'px';
 		document.body.style.height = pageHeight + 'px';
@@ -944,6 +942,23 @@ var Reveal = (function(){
 
 	}
 
+	/**
+	 * Injects the given CSS styles into the DOM.
+	 */
+	function injectStyleSheet( value ) {
+
+		var tag = document.createElement( 'style' );
+		tag.type = 'text/css';
+		if( tag.styleSheet ) {
+			tag.styleSheet.cssText = value;
+		}
+		else {
+			tag.appendChild( document.createTextNode( value ) );
+		}
+		document.getElementsByTagName( 'head' )[0].appendChild( tag );
+
+	}
+
 	/**
 	 * Retrieves the height of the given element by looking
 	 * at the position and height of its immediate children.
-- 
GitLab