1

我不知道这是否一定很重要,但我正在使用 Infragistics iggrid 为我的网格及其报告内容导出为 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 检查之后),而且我显然不够聪明,无法弄清楚原因。

我确定我错过了一些不需要创建服务器端文件的明显可能性,但我只是没有看到它。(免责声明:我女儿今天早上把我吵醒了,所以答案可能真的很琐碎,明天当我的大脑工作时我会感到愚蠢)。

4

1 回答 1

2

在服务器端,我生成 PDF 文件。现在,显然,我可以保存 PDF 服务器端并重定向到生成的文件,但这增加了我希望避免的临时文件的维护(但最坏的情况下,我可以去那里。现在只是在寻找选项) .

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

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

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

于 2013-03-19T16:41:53.913 回答