【发布时间】:2015-09-21 07:49:11
【问题描述】:
我使用 JavaScript 插件 (pdfmake) 成功创建了一个 PDF,它很棒。 但是,当我尝试渲染约 8,000 行的库存/分类帐打印输出时,它会冻结超过一分钟。
这就是我通常声明我的 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' }] }
在哪里
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' }];
和
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}]
我搜索了 web workers 发现它可以解决这个 UI 冻结问题。 所以我尝试为它创建一个网络工作者:
$('#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);
console.log() 的输出:
Worker 说:Object {pageOrientation: "portrait", content: Array[7]} 它正确记录了 json 结构。
到目前为止一切顺利。
但是在我将pdfmake.min.js 和vfs_font.js 添加到worker 之后,我得到了错误Uncaught TypeError: Cannot read property 'createElementNS' of undefined。
我什至在开始使用 worker 之前就收到了错误。
是否可以用 pdfmake 插件实现 web worker?
【问题讨论】:
-
看起来该工具需要 DOM/文档,而工作人员没有。您可能能够为您浏览器化的节点使用虚拟 dom 库,这可能很酷......
-
非常感谢您的关注,先生..您有没有机会提示我一些关于从哪里开始的链接..它真的对我有很大帮助..再次感谢
标签: javascript pdf web-worker pdfmake