Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript pdfmake.js未捕获类型错误:无法读取属性';长度';空的_Javascript_Html_Jsp_Pdfmake - Fatal编程技术网

Javascript pdfmake.js未捕获类型错误:无法读取属性';长度';空的

Javascript pdfmake.js未捕获类型错误:无法读取属性';长度';空的,javascript,html,jsp,pdfmake,Javascript,Html,Jsp,Pdfmake,未捕获的TypeError:无法读取null的属性“length” 当在我的客户机上运行下一个html/javascript代码时,它可以在游乐场上运行,但我不知道错误是什么 游乐场: 简单的 var usuario=‘用户’; 左向量=25; var右=25; var-top=290; var底部=50; 变量dd={ //字符串或{宽度:数字,高度:数字} 页面大小:'字母', //默认情况下,我们使用纵向,如果您愿意,可以将其更改为横向 pageOrientation:'肖像', //[

未捕获的TypeError:无法读取null的属性“length”

当在我的客户机上运行下一个html/javascript代码时,它可以在游乐场上运行,但我不知道错误是什么

游乐场:


简单的
var usuario=‘用户’;
左向量=25;
var右=25;
var-top=290;
var底部=50;
变量dd={
//字符串或{宽度:数字,高度:数字}
页面大小:'字母',
//默认情况下,我们使用纵向,如果您愿意,可以将其更改为横向
pageOrientation:'肖像',
//[左、上、右、下]或[水平、垂直]或仅一个数字表示相等的边距
页边距:[左、上、右、下],
页脚:函数(currentPage,pageCount){
返回{
保证金:[25,10,0,0],
text:currentPage.toString()+'/'+pageCount};
},
字体大小:9,
标题:{
保证金:[0,25,25,25],
字体大小:9,
堆栈:[
{列:[
{文本:'',宽度:150},
{堆栈:[
{text:'ASDASD',fontSize:14},
{text:'DGDFGDF',fontSize:12},
{文本:“ASDA 225522”,字体大小:12}
]},
{堆栈:[
{text:'EMS',fontSize:11},
{文本:'22/02/2016',字体大小:11},
{text:usuario,fontSize:11}],
对齐:'右',
宽度:85
}
]
},
{
保证金:[25,15,0,0],
列:['IMERC RECIB',{text:'SIMPLE',alignment:'right'}]
},
{
保证金:[25,0,0,0],
栏目:[
{text:[{text:'Descargado por:',bold:true},'Cliente']},
{text:[{text:'Mercaderia Paletizada',粗体:true},'Granel']},
{text:[{text:'utilizadan',粗体:true},'SI']}
]
},
{
保证金:[25,0,0,0],
栏目:[
{text:[{text:'Bulks Armados:',粗体:true},'7.0'],宽度:95},
{text:[{text:'Bulks Flejados:',粗体:true},'7.0'],宽度:95},
{text:[{text:'Area ocupada:',bold:true},'19.0 m²']},
{text:[{text:'Volumen ocupado:',bold:true},'37.0 m³']},
{text:[{text:'比索千克:',粗体:真},'3200.0']}
]
}
]
},
内容:[
{
字体大小:9,
表:{
校长:1,
宽度:[60,60,145,135,55,55],
正文:[
[
“Codigo 1”,
“Codigo 2”,
“描述Mercaderia”,
{stack:['$%%',{columns:['Dec','Rec','Dif']}],alignment:'center'},
嗯,,
“嗯”
],[
'10094461 2',
' ',
“梅萨展”,
{stack:[{columns:['0','0','0']}]},
“BTO”,
“转售”
],[
'10094461 2',
' ',
“梅萨展”,
{stack:[{columns:['0','0','0']}]},
“BTO”,
“Roto”
],
['','',{堆栈:[{列:['2222','3232','2']}],'',']
}
},
{margin:[0,10,0,0],text:[{text:'Observaciones:',bold:true},'asdasdas']},
{边距:[0,20,0,0],堆栈:[
{列:['CLIENTE',{text:'',宽度:50},'Recibe Mercaderia']},
{列:['Entrega de Mercaderia',{text:'',宽度:50},'Jefe de Bodega']},
{列:['m12121221{uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,
{列:['',{文本:'SELLO',宽度:50},]},
{列:['Visto Bueno',{text:'',宽度:50},'Fecha:uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu']},
{列:['Jefe de Produccion',{文本:'',宽度:50},'Hora:_________________']},
{列:[Ing.Roberto Estrada{uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
]}
]
};
var asdf=pdfMake.createPdf(dd);
asdf.open();

问题在于,代码会自动尝试在弹出窗口中生成PDF。如果弹出窗口被阻止,则会导致pdfmake脚本中出现错误(这对他们来说似乎是个大问题,应该更优雅地处理该错误)

我在本地尝试了你的代码,但失败了,但一旦我启用了弹出窗口,它就按预期工作了。我不确定是否有其他方法可以使用不依赖于
window.open()
的库,但它可能值得研究

pdfmake.js中的问题代码如下:

Document.prototype.open = function(message) {
    // we have to open the window immediately and store the reference
    // otherwise popup blockers will stop us
    var win = window.open('', '_blank');

    try {
        this.getDataUrl(function(result) {
            win.location.href = result;
        });
    } catch(e) {
        win.close();
        throw e;
    }
};
如果需要快速解决方案,请下载该脚本,在本地托管,然后将上面的部分更改为:

Document.prototype.open = function(message) {
    // we have to open the window immediately and store the reference
    // otherwise popup blockers will stop us
    //var win = window.open('', '_blank');

    try {
        this.getDataUrl(function(result) {
          document.querySelector('iframe').src = result;
        });
    } catch(e) {
        win.close();
        throw e;
    }
};

然后,您只需要在页面上的某个位置使用iframe,就可以将
document.querySelector('iframe')
与该特定框架的特定引用交换。最好还是找到一种方法让它在不编辑include的情况下工作,但这至少证明了弹出窗口确实是源问题。

@lennin92我不确定是什么原因导致了错误。我将您的确切代码示例复制到本地html文件中,并按预期工作。如果您在尝试调用
asdf.open()
@lennin92之前将
asdf
登录到控制台,会发生什么情况?我还更新了我的答案,以包含该问题的潜在解决方案problem@jmcgriz当然这只是我的看法
Document.prototype.open = function(message) {
    // we have to open the window immediately and store the reference
    // otherwise popup blockers will stop us
    //var win = window.open('', '_blank');

    try {
        this.getDataUrl(function(result) {
          document.querySelector('iframe').src = result;
        });
    } catch(e) {
        win.close();
        throw e;
    }
};