2017-08-09 63 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

相關問題