当通过数据url显示pdf时,firefox会挂起
问题描述:
我有一个应用程序,它使用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)上正常工作。窗户挂着。
答
原因是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的内置浏览器的尊重
我似乎在尝试在Firefox中运行它时出现此错误,为什么? ERROR抛出:DOMException [InvalidCharacterError: “字符串包含无效字符” 代码:5 nsresult:0x80530005 位置:http://本地主机:4200/vendor.bundle.js:7133] – Jayyf9
你能尝试在最小的PDF数据字符串?也许你在windows上,你的文件名包含来自文件名路径的反斜杠。 – Bernhard
这似乎是由于使用addImage尝试添加图像导致的。在我的情况下doc.addImage(数据,'JPEG',115,35,80,80)数据是图像的数据uri字符串。 – Jayyf9