@@ -162,30 +162,35 @@ var html2pdf = (function(html2canvas, jsPDF) {
162
162
} ;
163
163
164
164
html2pdf . makePDF = function ( canvas , pageSize , opt ) {
165
- // return document.body.appendChild(canvas);
166
-
167
- // Break the full canvas into pages, then reduce it to one page.
165
+ // Calculate the number of pages and get the full canvas image.
168
166
var ctx = canvas . getContext ( '2d' ) ;
169
167
var pxFullHeight = canvas . height ;
170
168
var pxPageHeight = Math . floor ( canvas . width * pageSize . inner . ratio ) ;
171
169
var nPages = Math . ceil ( pxFullHeight / pxPageHeight ) ;
172
170
var imgFull = ctx . getImageData ( 0 , 0 , canvas . width , canvas . height ) ;
173
- canvas . height = pxPageHeight ;
171
+
172
+ // Create a one-page canvas to split up the full image.
173
+ var pageCanvas = document . createElement ( 'canvas' ) ;
174
+ var pageCtx = pageCanvas . getContext ( '2d' ) ;
175
+ pageCanvas . width = canvas . width ;
176
+ pageCanvas . height = pxPageHeight ;
174
177
175
178
// Initialize the PDF.
176
179
var pdf = new jsPDF ( opt . jsPDF ) ;
177
180
178
181
for ( var page = 0 ; page < nPages ; page ++ ) {
182
+ // Trim the final page to reduce file size.
183
+ if ( page === nPages - 1 ) pageCanvas . height = pxFullHeight % pxPageHeight ;
184
+
179
185
// Display the page (fill with white a bit past the render edge just in case).
180
- ctx . fillStyle = '#FFFFFF' ;
181
- ctx . fillRect ( - 10 , - 10 , canvas . width + 20 , canvas . height + 20 ) ;
182
- ctx . putImageData ( imgFull , 0 , - page * pxPageHeight ) ;
186
+ pageCtx . fillStyle = '#FFFFFF' ;
187
+ pageCtx . fillRect ( - 10 , - 10 , pageCanvas . width + 20 , pageCanvas . height + 20 ) ;
188
+ pageCtx . putImageData ( imgFull , 0 , - page * pxPageHeight ) ;
183
189
184
190
// Add the page to the PDF.
185
191
if ( page ) pdf . addPage ( ) ;
186
- var imgData = canvas . toDataURL ( 'image/' + opt . image . type , opt . image . quality ) ;
187
- pdf . addImage ( imgData , opt . image . type , opt . margin [ 1 ] , opt . margin [ 0 ] ,
188
- pageSize . inner . width , pageSize . inner . height ) ;
192
+ var imgData = pageCanvas . toDataURL ( 'image/' + opt . image . type , opt . image . quality ) ;
193
+ pdf . addImage ( imgData , opt . image . type , opt . margin [ 1 ] , opt . margin [ 0 ] ) ;
189
194
190
195
// Add hyperlinks.
191
196
if ( opt . enableLinks ) {
0 commit comments