【问题标题】:Use this php code to open a pdf in a new tab使用此 php 代码在新选项卡中打开 pdf
【发布时间】:2012-10-04 15:22:53
【问题描述】:

我已经设法使用下面的 sn-p 代码在浏览器中打开 pdf。我希望它在新的浏览器选项卡中打开,而不是在同一页面中打开。

我没有使用标签。这段代码调用了许多动作,最后它应该显示 pdf。它工作正常,但我希望它在新标签中打开。

这可能吗?如果可以,请您向我解释一下如何操作。

我正在使用 Magento (EE 12.02) 应用程序及其在 php 5.3 上。

$file = $pdf_file_path;
$filename = $file_name;

    header('Content-type: application/pdf');
    header('Content-Disposition: inline; filename="' . $filename . '"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    header('Accept-Ranges: bytes');

    @readfile($file);

【问题讨论】:

  • 我很好奇为什么您认为代码不适用于早期版本的 IE
  • 好问题,虽然我很抱歉让我失望,但我只是假设它在早期版本的 IE 中不起作用。请原谅我将编辑问题并删除该部分。
  • 我对 IE 的早期版本了解得不够多,无法知道他们是否存在 PDF 文档问题;不过总的来说,不要忘记因为 PHP 是服务器端的,所以它通常是独立于浏览器的

标签: php magento pdf


【解决方案1】:

你不能从那个请求中做到这一点。

但是您可以通过将 target="_blank" 添加到您的 a 标签在新的浏览器窗口中打开链接,然后浏览器通常会使用新标签。

【讨论】:

    【解决方案2】:

    您可以在打开 pdf 文档时打开一个新选项卡。示例:如果打开 pdf 文档的代码位于名为 pdfdocument.php 的页面上, 就是这样的一些代码

        $pdf = file_get_contents($PDFfilename);
        header('Content-Type: application/pdf');
        header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
        header('Pragma: public');
        header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
        header('Content-Length: '.strlen($pdf));
        header('Content-Disposition: inline; filename="'.basename($PDFfilename).'";');
        ob_clean(); 
        flush(); 
        echo $pdf;
    

    并且您有一个指向该页面的链接,例如http://www.example.com/pdfdocument.php,您可以在新标签中显示它,例如<a href="http://www.example.com/pdfdocument.php" target="_blank"> click here to show pdf preview </a>

    【讨论】:

      【解决方案3】:

      要在其他浏览器选项卡中打开它,您应该在引用它的 html 中进行:<a href="..." target="_blank">Download pdf

      【讨论】:

      • 嗨。谢谢你的建议。不幸的是,这发生在动作期间。该 pdf 当时无法作为链接呈现。相反,我需要执行一些操作以使系统处于呈现 pdf 的状态。所以基本上在进行了一些其他操作之后,我想在单独的选项卡中打开一个 pdf,并且不能通过 标签来打开。谢谢你的建议!
      • 好的,谢谢,但您无法从服务器端执行此操作,除非您生成一个页面,并重定向到原始页面(以保留原始页面)并在浏览器(所有这些都使用 javascript)
      【解决方案4】:

      只需在末尾添加 exit() 即可:

      $file = $pdf_file_path;
      $filename = $file_name;
      
      header('Content-type: application/pdf');
      header('Content-Disposition: inline; filename="' . $filename . '"');
      header('Content-Transfer-Encoding: binary');
      header('Content-Length: ' . filesize($file));
      header('Accept-Ranges: bytes');
      
      @readfile($file);
      
      exit();
      

      这应该只是触发文件的下载。

      【讨论】:

      • 嗨,梅尔卡。我刚刚添加了您的建议,不幸的是它的行为方式完全相同。它在同一个浏览器选项卡中完美打开,我希望它在新选项卡中打开。谢谢你的建议!
      • 我认为您不能使用 PHP 触发新标签页的打开。除非您在下载 PDF 的链接上添加 target=_blank
      • 这对我很有帮助,谢谢我试图在同一页面上下载文件而不打开另一个标签。
      【解决方案5】:

      如果您使用<a> 标签,要在新标签中打开它,您可以像这样附加一个目标属性:

      <a href="your_pdf_generator_link" target="_blank" > TEXT </a>

      如果你有一个按钮,你可以应用内联 javascript,例如

      <input type="button" onclick="window.open('your_pdf_generator_link','_blank')" />

      希望这会有所帮助..

      【讨论】:

      • 小心,target="_blank" 不遵循 w3c 建议,内联 javascript 不遵循现代 javascript 最佳实践。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多