2016-09-19 22 views
0

我想知道一個正確和經過驗證的方式來打開(而不是保存)一個pdf的生成blob數組,如果我使用Intel XDK和Cordova爲Android進行開發,那麼該應用程序將包含一些默認應用程序(例如Adobe reader)。如何打開(不保存)pdf生成的blob數組(英特爾XDK-Android)?

未成功我想這(與jspdf生成):

function createPDF(){ 
     console.log("generating pdf..."); 
     var doc = new jsPDF(); 

     doc.text(20, 20, 'HELLO!'); 

     doc.setFont("courier"); 
     doc.setFontType("normal"); 
     doc.text(20, 30, 'This is a PDF document generated using JSPDF.'); 
     doc.text(20, 50, 'YES, Inside of cordova!'); 

     pdfOutput = doc.output(); 
     console.log(pdfOutput); 

     var buffer = new ArrayBuffer(pdfOutput.length); 
     var array = new Uint8Array(buffer); 
     for (var i = 0; i < pdfOutput.length; i++) { 
      array[i] = pdfOutput.charCodeAt(i); 
     } 
     var pdfAsDataUri = "data:application/pdf;base64," + array; 
     window.open(pdfAsDataUri); 
    } 

我也嘗試了很多例子,但沒有什麼工作,以防萬一,顯示在控制檯中沒有錯誤。

謝謝大家。

+0

你似乎將'ArrayBuffer''數組連接到一個字符串? 'console.log(array.join(「」))'在'console'登錄什麼? – guest271314

回答

0

您可以創建一個BlobpdfOutput,然後使用URL.createObjectURL()

var blob = new Blob([pdfOutput], {type:"application/pdf"}); 
    var url = URL.createObjectURL(blob); 
    var pdfAsDataUri = url; 
    window.open(pdfAsDataUri); 

plnkr http://plnkr.co/edit/xt5uVvskmcgSlf13xVVM?p=preview

+0

謝謝,但在Android中打開一個空白的屏幕,然後關閉,我也嘗試與[鏈接] window.open(pdfAsDataUri,'_system','位置=是'); [鏈接]打開在不同的屏幕上這將被趕上與Adobe閱讀器打開,但沒有任何反應。 –

+0

我用來測試英特爾XDK模擬器和安迪Android模擬器(我沒有一個物理的Android設備),你認爲這個問題會是這樣嗎?你能幫助我在真實的Android設備上測試我的應用程序嗎?:https://mega.nz/#!vIN1HI6I!PVlCT4ufT2DM_NTUU0w98abOawJdg5CAArw_mXA3PYo如果您同意,請使用「Ir PDF」和「CREATE PDF」嘗試(忽略其他按鈕) 。問候。 –

0

最後我能做到這一點分裂問題,以創建Blob一個Blob URL

*一個鍵創建文檔

*一鍵創建TE PDF內容

*一個鍵寫PDF內容到創建的文檔

*一個按鈕來打開文件

*只有科爾多瓦文件插件

而繼和適應的解決方案在這篇文章中: https://github.com/pwlin/cordova-plugin-file-opener2/issues/60

後來我會做視頻教程,因爲這個問題似乎很常見,很難解決。