2016-06-29 44 views
0

我正在開發一個Chrome應用程序,我想允許用戶導出爲PDF格式的幾個HTML表格。 我做了一些研究,我發現jsPdf作爲我需要的插件。 現在出現我的問題。 jsPDF及其函數「fromHTML」使用Chrome Packaged App中不可用的方法「document.writeln()」。jspdf在Chrome打包應用程序:document.writeln()不可用

「未捕獲的錯誤:document.writeln()在打包的應用程序中不可用。」

Console error as jspdf tries to use document.writeln()

我犯了很多在互聯網上的研究,發現有一些方法來對付這個問題,通過添加一些「document.create」。但是,雖然我不知道jspdf是如何工作的,但我真的不知道要創建什麼。

有jspdf是造成這一問題的部分:

var $frame, $hiddendiv, framename, visuallyhidden; 

framename = "jsPDFhtmlText" + Date.now().toString() + (Math.random() * 1000).toFixed(0); 

visuallyhidden = "position: absolute !important;" + "clip: rect(1px 1px 1px 1px); /* IE6, IE7 */" + "clip: rect(1px, 1px, 1px, 1px);" + "padding:0 !important;" + "border:0 !important;" + "height: 1px !important;" + "width: 1px !important; " + "top:auto;" + "left:-100px;" + "overflow: hidden;"; 

$hiddendiv = document.createElement('div'); 
$hiddendiv.style.cssText = visuallyhidden; 
$hiddendiv.innerHTML = "<iframe style=\"height:1px;width:1px\" name=\"" + framename + "\" />"; 
document.body.appendChild($hiddendiv); 

$frame = window.frames[framename]; 
$frame.document.open(); 
$frame.document.writeln(element);//This causes "Uncaught Error: document.writeln() is not available in packaged apps." 
$frame.document.close(); 
return $frame.document.body; 

這裏是我的jspdf庫的電話,也許我犯了這裏的錯誤:

$('#exportMonth').click(function(){ 
    console.log(TAG + "Starting rendering as PDF"); 

    var doc = new jsPDF(); 
    specialElementHandlers = { 
     // element with id of "bypass" - jQuery style selector 
     // here i've nothing to bypass, so nothing is 'bypassme' 
     '#bypassme': function(element, renderer) { 
      // true = "handled elsewhere, bypass text extraction" 
      return true 
     } 
    }; 
    //the id 'month' refers to a div containing a html Table 
    doc.fromHTML($('#month').html(),15,15 ,{ 
     width:600, 
     elementHandler:specialElementHandlers 
    }); 
    doc.save('Tst.pdf'); 

    console.log(TAG + "Should be done"); 
}); 

我會繼續我的研究,但我現在真的很失落,我真的需要你的幫助!

我可能忘記說一些事情,只是讓我知道,我會盡可能快地解決這個問題。

非常感謝!

+0

您可以查看此鏈接:http://stackoverflow.com/questions/16954731/google-closure-and-chrome-packaged-apps-compatibility – abielita

+0

@abielita感謝您考慮我的問題。我已經看過那篇文章幾次了,我的觀點是我不知道jspdf想寫什麼,所以我不能用document.create('我不知道')替換它。 – Kwarthys

回答

0

經過很多研究和一些rageQuits我發現了一個解決方案。我真的不知道它爲什麼會起作用,但它確實有效,我會在這裏分享這些信息,以防您遇到此問題。 我想這更像是一個技巧/黑客而不是真正的解決方案。

更換此:

doc.fromHTML($('#month').html(),15,15 ,{ 
    width:600, 
    elementHandler:specialElementHandlers 
}); 
doc.save('Tst.pdf'); 

通過這樣的:

doc.fromHTML($('#month')[0],15,15 ,{ //ONLY CHANGE IS HERE 
    width:600, 
    elementHandler:specialElementHandlers 
}); 
doc.save('Tst.pdf'); 

會工作。沒有更多的錯誤生成和PDF成功下載到本地文件。

如果有人知道爲什麼這個作品我會很高興學習,因爲這是kindda令人不安。

希望將有助於somne​​one有一天,

非常感謝「N」再見!

相關問題