PluginProbe
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin / trunk
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin vtrunk
trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 All 71 releases
pdf-print / js / front-script.js

front-script.js in PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin trunk, at js/front-script.js

185 lines 8.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 var beforeImageToPdf, afterImageToPdf;
2
3 /* Image of page to PDF */
4 function imageToPdf( id = 0 ) {
5 ( function( $ ) {
6
7 window.scrollTo( 0, 0 );
8
9 if ( '1' == pdfprnt_file_settings.count_generation ) {
10 $.ajax( {
11 url: pdfprnt_file_settings.ajaxurl,
12 type: "POST",
13 data: { action: 'pdfprnt_pdf_count', pdfprnt_ajax_nonce: pdfprnt_file_settings.ajax_nonce, id: id },
14 success: function() {
15 }
16 } );
17 }
18
19 var deferreds = [];
20 var fileSettings = {
21 'pageSize': pdfprnt_file_settings.page_size.toLowerCase(),
22 'marginLeft': Number( pdfprnt_file_settings.margin_left ),
23 'marginRight': Number( pdfprnt_file_settings.margin_right ),
24 'marginBottom': Number( pdfprnt_file_settings.margin_bottom ),
25 'marginTop': Number( pdfprnt_file_settings.margin_top ),
26 'fileAction': pdfprnt_file_settings.file_action,
27 'fileName': pdfprnt_file_settings.file_name
28 };
29
30 var pdf = new jsPDF( 'portrait', 'px', fileSettings['pageSize'] );
31 var width = pdf.internal.pageSize.getWidth();
32 var height = pdf.internal.pageSize.getHeight();
33 /* add to page Header and Footer */
34 function addImageCustom( canvas, imgWidth, imgHeight ) {
35 pdf.addImage( canvas.toDataURL('image/jpeg', 1.0 ), 'JPEG',
36 fileSettings['marginLeft'],
37 fileSettings['marginTop'],
38 imgWidth, imgHeight
39 );
40 }
41
42 let additionalHiddenSelectors = [];
43 if ( pdfprnt_file_settings.hide_classes ) {
44 additionalHiddenSelectors = pdfprnt_file_settings.hide_classes.split( ',' ).map( cls => cls.trim() ).filter( cls => cls );
45 }
46
47 const elementsToHideExisting = [...additionalHiddenSelectors];
48 const hiddenElements = [];
49 elementsToHideExisting.forEach( selector => {
50 const elements = document.querySelectorAll( selector );
51 elements.forEach( el => {
52 hiddenElements.push({ el, parent: el.parentNode, nextSibling: el.nextSibling });
53 el.style.display = 'none';
54 });
55 });
56
57 window.scrollTo(0, 0);
58 if ( 'undefined' != typeof beforeImageToPdf ) {
59 beforeImageToPdf();
60 }
61 /* hide default wp panel */
62 document.getElementById("wpadminbar") ? document.getElementById("wpadminbar").style.display = "none" : '';
63
64 var deferred = $.Deferred();
65 deferreds.push( deferred.promise() );
66 var canvasTop, canvasBottom;
67 generateCanvas( 'body', pdf, deferred );
68
69 function generateCanvas( selector, pdf, deferred ) {
70 html2canvas( document.querySelector( 'body' ) ).then( canvas => {
71 var contentWidth = canvas.width;
72 var contentHeight = canvas.height;
73 var headerSize = fileSettings['marginTop'] + fileSettings['marginBottom'];
74 var imgHeaderSize = ( contentWidth / width * headerSize );
75 /* The height of the canvas which one pdf page can show; */
76 var pageHeight = contentWidth / width * height;
77
78 /* the height of canvas that haven't render to pdf */
79 var leftHeight = contentHeight;
80 var imgWidth = width - fileSettings['marginLeft'] - fileSettings['marginRight'];
81 var imgHeight = width / contentWidth * contentHeight - headerSize;
82
83 if ( ( leftHeight + headerSize ) < pageHeight ) {
84 addImageCustom( canvas, imgWidth, imgHeight + headerSize );
85 } else {
86 var countPages = Math.ceil(leftHeight / pageHeight );
87 var leftHeightAfter = ( countPages * headerSize ) + leftHeight;
88
89 var canvasNew = document.createElement('canvas');
90 canvasNew.width = contentWidth;
91 /* var theColorBody = $('body').css("background-color"); */
92 var row = 0;
93 for ( var i = 0; i < countPages - 1; i++ ) {
94 canvasNew.height = pageHeight - imgHeaderSize;
95 var context = canvasNew.getContext('2d');
96 context.drawImage( canvas, 0, i * -pageHeight + row );
97 imgHeight = ( width / contentWidth * pageHeight - headerSize );
98 let n = 0;
99 /* var imgData = context.getImageData( fileSettings['marginLeft'], 0, contentWidth - fileSettings['marginRight'] - fileSettings['marginLeft'], pageHeight );
100 let n = 1;
101 let j = imgData.data.length - ( contentWidth - fileSettings['marginRight'] - fileSettings['marginLeft'] ) * 4 * n;
102 let rgb;
103 let lastPx = imgData.data.length;
104 while ( j != lastPx ) {
105 rgb = 'rgb(' + imgData.data[j] + ', ' + imgData.data[j + 1] + ', ' + imgData.data[j + 2] + ')';
106 j += 4;
107 if ( rgb != theColorBody ) {
108 n++;
109 j = imgData.data.length - ( contentWidth - fileSettings['marginRight'] - fileSettings['marginLeft'] ) * 4 * n;
110 lastPx = imgData.data.length - ( contentWidth - fileSettings['marginRight'] - fileSettings['marginLeft'] ) * 4 * ( n - 1 );
111 } else if ( n == 50 ) {
112 break;
113 }
114 } */
115 canvasNew.height = pageHeight - n;
116 context = canvasNew.getContext('2d');
117 context.drawImage( canvas, 0, i * -pageHeight + row );
118 addImageCustom( canvasNew, imgWidth, imgHeight );
119 leftHeight -= pageHeight;
120 pdf.addPage();
121 row = row + n;
122 }
123
124 leftHeightAfter += row;
125 var countPagesAfter = Math.ceil( leftHeightAfter / pageHeight );
126 if ( countPagesAfter != countPages ) {
127
128 canvasNew.height = pageHeight - imgHeaderSize;
129 context = canvasNew.getContext('2d');
130 context.drawImage( canvas, 0, i * -pageHeight + row );
131 addImageCustom( canvasNew, imgWidth, imgHeight );
132
133 pdf.addPage();
134 i++;
135 leftHeight -= pageHeight;
136 row += imgHeaderSize;
137 }
138
139 canvasNew.height = leftHeight + row;
140 context.drawImage( canvas, 0, i * -pageHeight + row );
141 imgHeightLast = width / contentWidth * canvasNew.height;
142 addImageCustom( canvasNew, imgWidth, imgHeightLast );
143
144 }
145 deferred.resolve();
146 });
147 }
148
149 if ( 'undefined' != typeof afterImageToPdf ) {
150 afterImageToPdf();
151 }
152 /* show default wp panel */
153 document.getElementById("wpadminbar") ? document.getElementById("wpadminbar").style.display = "block" : '';
154
155 hiddenElements.forEach( ({ el, parent, nextSibling }) => {
156 parent.insertBefore( el, nextSibling );
157 el.style.display = '';
158 });
159
160 // executes after adding all images
161 $.when.apply( $, deferreds ).then( function() {
162 if ( 'open' == fileSettings['fileAction'] ) {
163 pdf.setProperties({
164 title: fileSettings['fileName']
165 });
166 //pdf.autoPrint();
167 window.open( pdf.output('bloburl') );
168 /* IFRAME
169 var string = pdf.output('datauristring');
170 var iframe = "<head><style>*{margin: 0; padding: 0;}</style><title>" + fileSettings['fileName'] + "</title></head>" +
171 "<body><iframe width='100%' height='1000px' src='" + string + "'></iframe></body>"
172
173 var x = window.open();
174 x.document.open();
175 x.document.write( iframe );
176 x.document.close();*/
177
178 /* pdf.output( 'dataurlnewwindow' ); */
179 } else {
180 pdf.save( fileSettings['fileName'] );
181 }
182 });
183
184 } )( jQuery );
185 }