【问题标题】:Download pdf file from a string using Jquery使用 Jquery 从字符串中下载 pdf 文件
【发布时间】:2010-07-23 17:08:04
【问题描述】:

全部,

我有一个用 Zend Framework 和 MVC 编写的 PHP5 应用程序。在我的主页上,我想加入下载动态生成的 pdf 文件的功能。这样做的方式是:

  1. 用户点击“下载文件”链接。
  2. 单击时,PHP 控制器会发生 AJAX 调用,该控制器获取表单数据、生成 pdf 并将其作为字符串返回。
  3. 我的 javascript 函数现在有了 pdf 字符串。
  4. 如何向用户显示“打开/保存”对话框以从 javascript 下载 pdf 文件?

我有以下代码:

<script type="text/Javascript">
   $('#dlcontent').click(function(e) {
      $.ajax({
                type: 'POST',
                url: "/downloads/dlpolicies",
                data:  $("#frmMyContent").serialize(),
                cache: false,
                dataType: "html",
                success: function(html_input){
                    alert(html_input);  // This has the pdf file in a string.
                    //ToDo: Open/Save pdf file dialog using this string..
                }
            });
});
</script>

谢谢

【问题讨论】:

    标签: php javascript ajax model-view-controller zend-framework


    【解决方案1】:

    我会尽量保持简单。只需使用target="_blank" 汇总表单,然后让 PHP 强制下载文件。

    HTML 代码

    <script type="text/Javascript">
    $('#dlcontent').click(function(e) {
      e.preventDefault();
      $("#frmMyContent").submit();
    });
    </script>
    
    <form id="formMyContent" action="/downloads/dlpolicies" target="_blank" ... >
    ...
    </form>
    

    然后在您的服务器端,您需要告诉 PHP 以“下载”的形式发送响应。

    PHP 代码

    $this->getResponse()
      ->setHeader('Content-Disposition', 'attachment; filename=result.pdf')
      ->setHeader('Content-type', 'application/pdf');
    

    从这里得到这个: Zend Framework how to set headers

    【讨论】:

    • hmm..如何将 pdf 字符串强制转换为 result.pdf?
    • 内容类型应该是“application/pdf”,因为它在很久以前就已经标准化了。
    【解决方案2】:

    最简单的方法是打开一个带有 pdf 字符串 URL 的新窗口。

    【讨论】:

      【解决方案3】:

      将元素添加到您希望链接指向的页面。它可以是跨度或 div 或表格中的单元格或任何您想要的。给它一个唯一的ID。然后使用 jQuery 设置该元素的 html。我在这里将其称为somepageelement

      $('#dlcontent').click(function(e) {
            $.ajax({
                      type: 'POST',
                      url: "/downloads/dlpolicies",
                      data:  $("#frmMyContent").serialize(),
                      cache: false,
                      dataType: "html",
                      success: function(html_input){
                          $('#somepageelement').html('<a href="' + html_input + '">Click here to download the pdf</a>');
                      }
                  });
      });
      

      【讨论】:

      • 问题是“#dlcontent”本身就是一个下载pdf文件的链接。我可以通过弹出窗口来做吗?有了这个,我不必点击 2 个链接来下载文件。
      • @vincent 好吧,很抱歉造成误会。在那种情况下,我不确定您为什么需要 Ajax 来执行此操作。我将有一个表单发布到生成 pdf 的页面并在表单上指定 target="_new",以便它在新窗口中打开。如果您愿意,您可以点击#dlcontent 提交表单。
      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 2016-04-07
      • 2015-05-27
      • 2011-03-15
      • 1970-01-01
      • 2015-04-18
      • 2019-07-30
      • 2011-11-26
      相关资源
      最近更新 更多