Переглянути джерело

[FIX] pdf multibyte encoder

Gogs 6 роки тому
батько
коміт
1abefa769f
1 змінених файлів з 42 додано та 23 видалено
  1. 42 23
      static/src/js/main.js

+ 42 - 23
static/src/js/main.js

@@ -3,6 +3,7 @@ window.pdfjsLib.GlobalWorkerOptions.workerSrc = '/printer_bridge/static/lib/js/p
 // Tools
 openerp.pdfJs = window.pdfjsLib || _.noop();
 openerp.printJs = window.printJS || _.noop();
+openerp.html2canvas = window.html2canvas || _.noop();
 
 /**
  * 
@@ -140,6 +141,7 @@ openerp.printer_bridge = function (instance, local) {
         },
         get_from_server: function (url) {
             instance.web.blockUI();
+
             return $.Deferred(function (d) {
                 instance.web.jsonRpc(url, 'call').done(function () {
                     instance.web.unblockUI();
@@ -170,7 +172,26 @@ openerp.printer_bridge = function (instance, local) {
             var mime_type = 'data:application/pdf;base64,';
             
             if (data instanceof Uint8Array) {
-                data = mime_type + btoa(String.fromCharCode.apply(null, data));
+                var Uint8ArrayToStr = function (u8a) {
+                    var CHUNK_SZ = 0x8000;
+                    var c = [];
+                    for (var i = 0; i < u8a.length; i += CHUNK_SZ) {
+                        c.push(String.fromCharCode.apply(null, u8a.subarray(i, i + CHUNK_SZ)));
+                    }
+
+                    return c.join('');
+                }
+
+                try {
+                    data = Uint8ArrayToStr(data);
+                    data = btoa(data);
+                    data = mime_type + data;
+                } catch (error) {
+                    instance.web.unblockUI();
+                    instance.webclient.crashmanager.show_message(error);
+
+                    return;
+                }
             }
 
             if (!data.startsWith(mime_type)) {
@@ -184,9 +205,9 @@ openerp.printer_bridge = function (instance, local) {
                     print_directly: print_directly || this.config.print_directly,
                     data: data
                 });
-            } catch (e) {
+            } catch (error) {
                 instance.web.unblockUI();
-                instance.webclient.crashmanager.show_message(e);
+                instance.webclient.crashmanager.show_message(error);
             }
         }
     });
@@ -614,9 +635,6 @@ openerp.printer_bridge = function (instance, local) {
         template: 'TicketTestPage',
         events: {
             'click .ticket-test-btn': 'print_test' 
-        },
-        start: function () {
-
         },
         print_test: function (e) {
             e.preventDefault();
@@ -627,29 +645,30 @@ openerp.printer_bridge = function (instance, local) {
 
             $('body').append(wrapper);
 
-            // var ticket_el = $('body').find('.eiru_pos_ticket').get(0);
             var ticket_el = document.querySelector('.eiru_pos_ticket');
-
-            console.log(ticket_el);
-
-            var pdf = new jsPDF({
-                unit: 'mm',
-                format: [290, 70]
-            });
+            var factor = 3.779;
 
             instance.html2canvas(ticket_el, {
-                canvas: pdf.canvas,
                 logging: false,
-                removeContainer: true,
-                width: 264.5,
-                height: 1016.6
+                width: 70 * factor
             }).then(function (canvas) {
-                console.log(canvas);
-            });
+                $(wrapper).remove();
 
-            // var data = pdf.output('datauristring');
-            // console.log(data);
-            // local.print(data);
+                var dataURL = canvas.toDataURL('image/png');
+
+                var width = canvas.width / factor;
+                var height = canvas.height / factor;
+
+                var doc = new jsPDF({
+                    unit: 'mm',
+                    format: [height, 70]
+                });
+
+                doc.addImage(dataURL, 'PNG', 0, 0, width, height);
+                var data = doc.output('datauristring');
+
+                local.print(data);
+            });
         }
     });