2016-06-29 7 views
0

Chrome Appを開発しています。ユーザーがPDF形式でHTML形式でエクスポートできるようにしたいと考えています。 私はいくつかの調査を行い、必要なプラグインとしてjsPdfが見つかりました。 今、私の問題になります。 jsPDFとその機能「fromHTML」は、Chromeパッケージアプリケーションでは使用できない「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はローカルファイルに正常にダウンロードされました。

誰かがこの作品がなぜうまくいくのか分かっているなら、私は喜んで学ぶでしょう、これはちょっと邪魔です。

、それはsomne​​one 1日の助けとなる

おかげで多くのことを期待して「n」をあなたを後で参照してください!

関連する問題