J'ai réussi à créer un PDF en utilisant un plug-in JavaScript (pdfmake) et c'était génial. Mais lorsque j'essaie d'afficher un inventaire/registre de 8 000 lignes, il gèle pendant plus d'une minute.Comment appliquer le Web worker au rendu d'un PDF en utilisant makepdf
Voilà comment je déclare habituellement mon docDefinition
var docDefinition = {
pageOrientation: orientation,
footer: function(currentPage, pageCount) { return {text: currentPage.toString() + '/' + pageCount, fontSize:8, alignment:'center'}; },
content:[
printHeader,
{ fontSize: 8, alignment: 'right', style: 'tableExample',
table: {
widths: width,
headerRows: 1, body: arr },
layout: 'lightHorizontalLines' }] }
où
var printHeader = [ { text: 'COMPANY NAME',alignment:'center' },
{ text: 'Address 1',alignment:'center' },
{ text: 'Address 2',alignment:'center' },
{ text: 'Additional Details,alignment:'center' },
{ text: 'document title',alignment:'center' }];
et
var arr = [[{"text":"","alignment":"left"},"text":"Date","alignment":"left"},
{"text":"Trans #","alignment":"left"},{"text":"Description","alignment":"left"},
{"text":"Ref #","alignment":"left"},{"text":"Debit","alignment":"left"},
{"text":"Credit","alignment":"left"},{"text":"Amount","alignment":"left"},
{"text":"Balance","alignment":"left"}],[{"text":"ACCOUNT : Merchandise Inventory","alignment":"left","colSpan":8},"","","","","","","",
{"text":"1,646,101.06"}],["","10/13/2015","ST#0094",{"text":"","alignment":"left"},{"text":"","alignment":"left"},"546.94","0.00","546.94","1,646,648.00"],[{"text":"Total","alignment":"left","bold":true},"","","","",
{"text":"546.94","alignment":"right","bold":true},
{"text":"0.00","alignment":"right","bold":true},
{"text":"","alignment":"right","bold":true},
{"text":"546.94","alignment":"right","bold":true}],[{"text":"ACCOUNT : Accounts Payable-Main","alignment":"left","colSpan":8},"","","","","","","",
{"text":"-1,741,953.62"}],["","10/13/2015","ST#0094",
{"text":"","alignment":"left"},
{"text":"","alignment":"left"},"0.00","546.94","-546.94","-1,742,500.56"],
[{"text":"Total","alignment":"left","bold":true},"","","","",
{"text":"0.00","alignment":"right","bold":true},
{"text":"546.94","alignment":"right","bold":true},
{"text":"","alignment":"right","bold":true},
{"text":"-546.94","alignment":"right","bold":true}]
J'ai cherché sur les travailleurs Web et voir qu'il peut résoudre ce problème de gel de l'interface utilisateur. J'ai donc essayé de créer un travailleur web pour lui:
$('#makepdf').click(function(){
var worker = new Worker("<?php echo URL::to('/'); ?>/js/worker.js");
worker.addEventListener('message',function(e){
console.log('Worker said: ',e.data);
},false);
worker.postMessage(docDefinition);
//worker.js
self.addEventListener('message', function(e) {
self.postMessage(e.data);
}, false);
Sortie de console.log()
:
travailleur a dit: Object {PageOrientation: « portrait ", contenu: Array [7]} sa journalisation correctement la structure json.
Jusqu'ici tout va bien. Mais après avoir ajouté pdfmake.min.js
et vfs_font.js
à l'agent, j'obtiens l'erreur Uncaught TypeError: Cannot read property 'createElementNS' of undefined
.
Je reçois l'erreur avant même que j'ai commencé à utiliser le travailleur.
Est-il possible d'implémenter des travailleurs Web avec le plugin pdfmake?
ressemble à cet outil a besoin du DOM/document, que les travailleurs n'ont pas. vous pourriez être en mesure d'utiliser une dom dom virtuelle pour le noeud que vous naviguez, cela pourrait être cool ... – dandavis
Merci beaucoup pour l'attention monsieur .. est-il une chance que vous pouvez me suggérer quelques liens sur par où commencer. cela m'aiderait beaucoup .. merci encore – melvnberd