PluginProbe
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin / 2.4.5
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin v2.4.5
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 2.4.5, at js/front-script.js

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