2013-03-19 101 views
1

我不知道这一点很重要,但我使用Infragistics iggrid作为我的网格,并将它们的报告内容导出为PDF。如何在ASP.NET MVC中将网格导出为PDF格式

我的底层问题是我想要导出的数据在浏览器中,我宁愿不必创建服务器端文件进行下载。我们在屏幕上有一个图标,用户点击下载PDF。

所以我在客户端上做的是收集所有的数据。这必须在客户端完成,因为我想要在用户对数据进行排序,过滤和按列排序时导出数据(否则我可以只收集数据服务器端,这会使这更简单)。然后我通过POST将数据发送到服务器。

在服务器端,我生成PDF文件。现在,很明显,我可以保存PDF服务器端并重定向到生成的文件,但是它增加了我希望避免的临时文件的维护(但最糟糕的情况是,我可以去那里,只是现在就钓鱼) 。

我试图返回编码数据的base64,然后做:

window.open("data:application/pdf;base64," + encodedData);

这不工作(至少在IE),因为URL限制是有点过2K。

我尝试使用downloadDataURI javascript函数在这里:http://code.google.com/p/download-data-uri/

但只出现在Chrome工作(甚至注释掉WebKit的检查后),我显然没有足够的智慧找出原因。

我确定我错过了一些不需要创建服务器端文件的明显可能性,但我只是没有看到它。 (免责声明:今天早上我的女儿把我吓得很厉害,所以答案可能非常微不足道,明天当我的大脑工作时,我会觉得很愚蠢)。

回答

2

在服务器端生成PDF文件。现在,很明显,我可以保存PDF服务器端并重定向到生成的文件,但是 添加了我希望避免的临时文件的维护(但是最坏的情况是 ,我可以去那里。马上)。

您不需要将它保存在服务器上。您可以简单地将PDF文件(我假设您已将其以某种类型的流或字节[])流式传输给用户。所有你需要做的就是像

Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", "filename.pdf"); 
Response.BinaryWrite(bytes); 
Response.Flush(); 
Response.Close(); 
Response.End(); 

这将提示用户保存该文件或在Adobe Reader中打开它。该文件根本不会在服务器上创建。

+0

是的,我是个白痴。我在做一个.ajax POST,但当然没有理由我不能做一个表单发布,而是... – Pete 2013-03-19 17:02:45

相关问题