【问题标题】:Creating PDFs on the fly using AJAX & C#使用 AJAX 和 C# 即时创建 PDF
【发布时间】:2009-09-05 05:23:17
【问题描述】:

我有一个网页。有一个生成 pdf 报告的链接。当用户单击该链接时,pdf 生成过程应该开始。由于生成的 pdf 的文件大小很大(> 15Mb),用户不能等待&因此必须继续他的其他活动。这意味着现在将同时发生以下事情

  1. PDF 生成过程有增无减
  2. 用户继续浏览,没有任何晃动
  3. pdf 生成完成后,用户应该会收到一封包含下载链接的电子邮件。

基本上实现是

  1. 用户点击生成报告按钮
  2. 我使用 AJAX 调用 c# 函数说 generateReport()

问题

  1. 当我这样做时,除非整个过程完成,否则不允许用户执行任何操作。当然,他可以单击不同的链接,但由于 AJAX 调用仍在实施中而没有响应

我如何实现这一点。我是一个 dot net(framework 2.0) 开发人员,使用 C# 创建 aspx 网页。我使用 javascript 和 AJAX(AjaxPro) 来摆脱典型 ASP.NET Web 应用程序中的回发。

【问题讨论】:

  • 这里有数据库吗?生成 pdf 文件后,我们需要一个地方来存储它们。
  • 没有..没有数据库。但是我怎样才能让数据库参与进来?

标签: c# ajax multithreading


【解决方案1】:

在这种情况下,您可能需要考虑将 PDF 生成代码拆分到一个单独的服务中,您的 AJAX 代码可以与之交互以启动 PDF 创建。服务创建 PDF 文件后,服​​务可以通过电子邮件向用户发送相关信息。

AJAX 代码将使用远程处理与服务通信。

【讨论】:

  • 如何创建单独的服务?
  • 您需要创建一个 Windows 服务类型的新项目。这是一个使用远程服务的示例:codedblog.com/2007/09/01/…
【解决方案2】:

您在创建报告并将它们通过电子邮件发送给用户时的概念是一个很好的概念。

在客户端的实现应该非常简单,即一个基本的调用来指示需要创建一个报告。即保存到一个表(报告队列)

报表的实际创建不应由前端的任何调用直接触发,创建一个贯穿“报表队列”的服务(Windows 服务)生成 PDF 文件并发送电子邮件。

作为一个附加选项,假设 PDF 没有被破坏(即不是仅电子邮件解决方案),可以在客户端上创建一个 ajax 弹出窗口,然后用户可以转到报告页面并下载已经生成的文件。

【讨论】:

    【解决方案3】:

    您可以尝试在计时器上对函数 isReportDone() 进行 AJAX 调用,这反过来会检查 PDF 的存储库。为了生成 PDF,我认为您需要将该任务从正常的请求响应线程中传递出去。通过调用单独的线程(多线程很有趣)来处理它,或者通过将数据传递到服务器上的单独服务。

    这只是两个想法,实际上我在从必须强制下载的数据库生成文件时遇到了类似的问题。我最终在一个单独的窗口中调用了一个单独的页面,将数据写入响应流。在客户的网络阻止任何和所有弹出窗口之前,它实际上工作得很好。

    【讨论】:

      【解决方案4】:
      1. 用户要求生成报告(点击按钮)
      2. Page 启动对 GeneratePdf(args) 的异步服务调用。
      3. 用户在生成 Pdf 时看到某种微调器,这样他们就知道发生了什么事。
      4. Pdf 已生成(iTextSharp 可能在这里派上用场)。
      5. Pdf 存储在某处。数据库 blob 字段将是理想的,这样 web 服务就可以传回新文件的 id。否则,将文件名传递回 ajax 代码。
      6. Webservice async (see this one) 完成事件发生,ajax 代码抛出一个弹出窗口或重定向到一个新页面。也许您想用“Ready!”替换微调器。关联。
      7. pdf 报告文件的链接已通过电子邮件发送给用户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 2011-07-23
        • 2011-09-30
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多