【问题标题】:How best to export a grid to PDF in ASP.NET MVC如何在 ASP.NET MVC 中最好地将网格导出为 PDF
【发布时间】:2013-03-19 16:35:28
【问题描述】:

我不知道这是否一定很重要,但我正在使用 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 检查之后),我显然不够聪明,无法弄清楚原因。

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

【问题讨论】:

    标签: javascript asp.net-mvc asp.net-mvc-4 infragistics iggrid


    【解决方案1】:

    在服务器端,我生成 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 中打开它。该文件根本不会在服务器上创建。

    【讨论】:

    • 是的,我是个白痴。我正在做一个 .ajax POST,但当然没有理由我不能做一个表单帖子......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2013-11-21
    相关资源
    最近更新 更多