6

ユーザーがpdfファイルを生成して印刷できるようにする、chrome 23+を使用した(オフライン)パッケージアプリを開発しようとしています。これを達成するためにさまざまな方法を試しましたが、実際に機能するものはありません。

このようなものを使用すると、ブラウザ/アプリがフリーズします:

window.html (includes pdf.js (http://code.google.com/p/jspdf/) and genpdf.js (see below)):

....
<browser src="about:blank" width="1024" height="768"></browser>

genpdf.js:

var doc = new jsPDF();
doc.text(20, 20, 'foo');
doc.text(20, 30, 'bar');
document.querySelector('browser').src = window.webkitURL.createObjectURL(new Blob([doc.output()], {type: 'application/pdf'}));

これは、生成された PDF を表示するための私の好みの方法ですが、ウィンドウがフリーズすると、ユーザーはそれを印刷できません。

もう 1 つの方法は、PDF をデスクトップに保存することです。

chrome.fileSystem.chooseFile({type: 'saveFile'}, function(writableFileEntry) {
    writableFileEntry.createWriter(function(writer) {
      writer.onerror = function(e) {
        console.log('writeend');
      };
      writer.onwriteend = function(e) {
        console.log('writeend');
      };
      var doc = new jsPDF();
      doc.text(20, 20, 'foo');
      doc.text(20, 30, 'bar');
      writer.write(new Blob([doc.output()], {type: 'application/pdf'}));
    }, errorHandler);
});

これは機能しますが、デスクトップ上のファイルはアプリが閉じられるまでロックされます。保存されたファイルを解放するために欠落している API 呼び出しはありますか?

前もって感謝します!

4

2 に答える 2

3

2 番目の解決策では、書き込みがいつ終了したかをライターが知ることができるように、バッファー サイズを指定する必要があると思います。

var docBuffer = doc.output();
writer.write(new Blob([docBuffer], {type: 'application/pdf', 'size': docBuffer.length}));
于 2012-12-11T18:33:41.813 に答える
-1

wkhtmltopdfにスニークピークを取り、WebKitエンジンを使用してHTML+CSSページからPDFを生成します。私はそれが大好きです、それはページがChromiumブラウザに表示されるのと同じピクセル結果を生成します。MS用のバージョンがあります-WindowsとLinux、私は両方を試しました。

于 2012-12-13T22:20:31.723 に答える