2010-03-10 74 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