2017-08-09 28 views
0

我有一个应用程序,它使用jspdf在浏览器中创建pdf。我想在另一个选项卡/窗口中显示此PDF。当通过数据url显示pdf时,firefox会挂起

function open_data_uri_window(url) { 
    var html = '<html>' + 
    '<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;} </style>' + 
    '<body>' + 
    '<p>new viewer</p>' + 
    '<iframe type="application/pdf" src="' + url + '"></iframe>' + 
    '</body></html>'; 

    var a = window.open("about:blank", "Zupfnoter"); 
    a.document.write(html); 
    a.document.close(); 
} 

它可以在Chrome(60.0.3112.90)中正常工作,但不能在Firefox(54.0.1 64位MacOs)上正常工作。窗户挂着。

回答

1

原因是PDF.js(第331行)尝试从url中提取建议的文件名。这个正则表达式根据dataurl挂起。

解决方案是在datauri字符串指定一个名字,这样一个公认的名字总是发现,在注释1中提到Is there any way to specify a suggested filename when using data: URI?

function open_data_uri_window(url) { 
    var url_with_name = url.replace("data:application/pdf;", "data:application/pdf;name=myname.pdf;") 
    var html = '<html>' + 
    '<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;} </style>' + 
    '<body>' + 
    '<p>new viewer</p>' + 
    '<iframe type="application/pdf" src="' + url_with_name + '"></iframe>' + 
    '</body></html>'; 
    var a = window.open("about:blank", "Zupfnoter"); 
    a.document.write(html); 
    a.document.close(); 
} 

提示的:指定的名称不使用Chrome的内置浏览器的尊重

+0

我似乎在尝试在Firefox中运行它时出现此错误,为什么? ERROR抛出:DOMException [InvalidCharacterError: “字符串包含无效字符” 代码:5 nsresult:0x80530005 位置:http://本地主机:4200/vendor.bundle.js:7133] – Jayyf9

+0

你能尝试在最小的PDF数据字符串?也许你在windows上,你的文件名包含来自文件名路径的反斜杠。 – Bernhard

+0

这似乎是由于使用addImage尝试添加图像导致的。在我的情况下doc.addImage(数据,'JPEG',115,35,80,80)数据是图像的数据uri字符串。 – Jayyf9

相关问题