2010-03-10 28 views
3

我想用extjs打印PDF文件,任何幫助將不勝感激。我的想法是通過http://xmlgraphics.apache.org/fop/0.95/servlets.html#minimal-servlet的建議從服務器傳遞PDF文件。但問題是,我通過ajax提交表單數據,將它們保存到數據庫,使用FOP創建PDF以及...想將結果PDF傳回給客戶端。 我最後的想法是將PDF保存到服務器上的臨時文件,返回成功:'true'到extjs,然後使用iframe再次獲取臨時文件以進行打印:) 是否還有更正確的解決方案?或者可能有人已經準備好了這些東西的工作代碼?從extjs打印PDF - 最佳解決方案

回答

0

我不認爲這與Ext JS有什麼關係。您可能需要生成/存儲PDF並按照您提及的方式返回URL,或者您可以使用內容類型「application/pdf」直接將回復發送回瀏覽器,並且默認的瀏覽器行爲將處理它。任何一種方法都適用於任何前端代碼。

我已經成功完成了第二種方法,但在.NET環境中。原則應該是一樣的。

+1

感謝您的回覆。當然原則是一樣的,但惡魔是在細節:)隨着extjs你可以發送一個Ajax請求來保存表單,但無法得到響應像我得到的流式PDF。所以在這種情況下,我們必須發送第二個請求到流文件。 – maxx 2010-03-11 23:55:44

2

那麼,最後我來到了下一個解決方案:首先我們使用AJAX請求保存表單細節,並在服務器端生成PDF。

 success : function(form, action) { 
      var result = Ext.decode(action.response.responseText) 
      if (result.success) { 
       this.openForPrint(result.tmpFileName); 
      } 
     }, 

比我們使用iframe來下載和打開文件

openForPrint : function(fileSrc) { 
     Ext.DomHelper.append(document.body, { 
      tag : 'iframe', 
      name : 'printIframe', 
      src : this.getPrintPalletTagUrl()+'?userAction=actionPrint&tmpFileName='+fileSrc 
     }); 
    } 

這種方法可以讓我們檢查保存操作響應並顯示有意義的對話,以用戶如果保存失敗。

+0

是的,我就是這麼做的。但請注意,在服務器端,確保您設置響應頭來強制下載(我認爲Content-Type和Content-Disposition),否則在某些設置(帶有PDF瀏覽器插件的Windows)中,最終會打開一個pdf一個隱形的iframe,而不是要求下載 – Ben 2010-03-12 00:23:41