2012-09-12 122 views
6

我想開發一個(離線)打包的應用程序與鉻23 +允許用戶生成和打印PDF文件。我嘗試過不同的方式來實現這一點,但沒有一個真正有效。Chrome打包的應用程序/ pdf.js

使用這樣的事情,瀏覽器/應用程序凍結:

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首選方式,但與窗口凍結用戶不能打印。

另一種方式是將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-call我缺少釋放保存的文件?

在此先感謝!

+0

很想看到有人回答這個問題。 – knownasilya

+1

如果您的首選解決方案導致Chrome崩潰,我會做的第一件事是[提出問題](http://code.google.com/p/chromium/issues/list)。 Chrome開發者很可能會幫助你。 –

回答

3

在第二種解決方案中,我相信您應該提供緩衝區大小,以便作者能夠知道寫入何時結束。

var docBuffer = doc.output(); 
writer.write(new Blob([docBuffer], {type: 'application/pdf', 'size': docBuffer.length})); 
+0

我不會說你的答案解決了這個問題,但它確實讓我們更接近於調試它。 – knownasilya

+0

是的,你說得對!如果操作提供了更多信息,我想幫助 – cvsguimaraes

-1

採取一個潛行峯wkhtmltopdf,它使用WebKit引擎從HTML + CSS頁面生成PDF。我喜歡它,它產生的像素與Chromium瀏覽器中出現的頁面相同。有MS-Windows和Linux的版本,我都試過。

+1

OP正在尋找一種瀏覽器內方法,特別是使用Chrome應用程序,而不是基於webkit的實用程序。 – knownasilya

+0

Knownasilya指出,這並不能解決所問的問題。 –

+0

有時,改變問題的努力花費比解決問題要少。我不熟悉*打包的應用*,但是如果他們可以啓動外部可執行文件,也許這是一個更快的解決方案。另外,當從HTML生成PDF時,模板可以由網頁設計師編輯,結果佈局將更專業。 – ern0

相關問題