【问题标题】:How to Open .pdf on a new Tab如何在新选项卡上打开 .pdf
【发布时间】:2013-04-03 09:07:37
【问题描述】:

目标:

在某些任务正确完成后,我必须在新选项卡上打印 PDF。

步骤:我想执行一个应该转到服务器的方法,获取 PDF 并在新选项卡上打开它,我正在尝试这些但没有工作:

控制器:导出

 public ActionResult PrintPdf()
    {
        Response.AppendHeader("Content-Disposition", "inline; filename= " + MyClassPdfWriter.GetFileName);
        return File(MyClassPdfWriter.GetMemoryStream, "application/pdf");
    }

查看

function TasksSucced(){
      $.get('@Url.Action("PrintPdf", "Export", "new {target = _blank}")');
}

【问题讨论】:

  • 也许可以,但是..这有点脏.. jeje我会看看是否有更好的选择,如果没有,我会使用您的选择:D
  • 是的,实际上这是一个肮脏的黑客。 :D 如果你发现更好的东西,请告诉我。 :)
  • 拉曼泰!!我找到了! :)

标签: javascript jquery asp.net-mvc-3 url.action


【解决方案1】:

解决了!这对我有用

 window.open('/Export/PrintPdf');

【讨论】:

  • 弹出窗口阻止程序阻止 pdf 在 chrome 中下载,有没有办法绕过它? (告诉用户允许弹出此页面超出了他们的理解范围:/
  • 不适用于base64 编码文件。至少在 Chrome 中。
  • @cpacheco 您可以通过仅打开选项卡以响应用户操作来绕过弹出窗口阻止程序。换句话说,让他们点击一个按钮来打开它。所以有一个直接调用window.open()的按钮。
【解决方案2】:

有几种方法可以下载或查看 PDF。

  • 查看

您可以在响应头中将content-type设置为application/pdf,就像Content-Type: application/pdf

为了在 javascript 中打开新标签页,请添加此代码。

window.open("Here Download PDF url", '_blank');
  • 下载

您需要像application/octet-stream一样在响应头中将content-type设置为application/octet-stream

并将 download HTML5 属性添加到 a 标记或只是 target="_blank"

<a href="PDF URL" download="pdf">Download</a>
<a href="PDF URL" target="_blank">Download</a>

因此您可以使用 PDF.js 或 3rd 库在 iFrame 或内联页面中查看 PDF。

【讨论】:

    【解决方案3】:
    $("a[target!='_blank'][href$='.pdf']").attr("target", "_blank");
    

    【讨论】:

    • 正是我需要的 :-) 谢谢
    • @Mepps 太棒了!很高兴我能帮忙:)
    【解决方案4】:

    如果有人遇到类似问题,上述解决方案在 Google Chrome 中都不适用于我(它们在 Firefox 中确实有效)

    此代码适用于所有主流浏览器:

    var a = document.createElement('A');
    var filePath = 'https://pathtopdf.com/file.pdf';
    a.href = filePath;
    a.download = filePath.substr(filePath.lastIndexOf('/') + 1);
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    

    【讨论】:

    • 不适用于base64 编码文件。至少在 Chrome 中。
    • 下载文件而不是根据问题在新选项卡中打开它。
    【解决方案5】:

    您可以使用以下解决方案

       jQuery('<form target="_blank" action="' + URL + '" method="get"></form>').appendTo('body').submit().remove();
    

    其中 URL 是 pdf 网址...

    【讨论】:

    • 不适用于 base64 编码文件。至少在 Chrome 中。
    【解决方案6】:

    您可以尝试使用jQuery.deffered。我为你准备了示例函数。它将处理 getPdf 调用,然后将解决承诺。希望这会有所帮助

    function getPDF() {
        return '';
    }
    
    getPdf()
      .then(function(response) {
        console.log('response here' + response);
        window.open(response);
      }).fail(function(){
          console.error('failed reposne');
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2021-12-02
      • 2019-04-12
      • 2013-12-22
      • 2017-04-28
      • 2019-05-26
      • 2012-05-02
      相关资源
      最近更新 更多