在新选项卡中从FPDF打开PDF


Open PDF from FPDF in new tab

我有一个流程,如果客户希望在创建业务单元时生成和下载报告,他可以单击该流程。本报告将采用pdf格式。

目前我正在使用Codeigniter,并使用FPDF生成pdf文件。

pdf在被要求时打开良好。但是

问题:1) PDF在同一个选项卡中打开。我希望PDF在新的选项卡中打开,我正在考虑如何打开。如果是pdf链接,"_target"将帮助我在新选项卡中打开pdf。但这里是服务器端生成的pdf。因此,"_target"将不起作用,所以我正在寻找替代方案。

2) pdf生成后,不会读取下一行代码。执行实际上到此为止。我想知道如何在输出pdf文件后继续这个过程。

示例

$pdf->Output($exampleArray, 'D'); // exampleArray carries all data to PDF and helps output the pdf and D forces FPDF to download PDF rather than opening it. Instead of 'D' I can use 'I' but that will output the pdf in same tab.
$this->continueNextFunction(); // This function should run and open the views in it.

从上面的例子中,我希望看到下载PDF或"在新选项卡中打开",然后执行下一行,帮助页面重定向和打开所需的视图。

如果需要进一步解释,也请告诉我。我尽力解释了这里的情况。我在谷歌上看过这个,但我还没有找到任何解决方案。

如有任何帮助,我们将不胜感激。

您应该在运行FPDF代码之前创建新选项卡。

或者,您可以将pdf保存为一个文件,并打开一个具有正确标题的新选项卡。请看这个问题:通过PHP/Perl 在用户浏览器中显示PDF文件

除非将代码保存到文件或字符串中,否则代码将以设计输出结束。

$pdf->Output($filename,'F');

如果你能详细说明输出后你想做什么,我可能会提供更多帮助。

以下是我们正在做的事情和一些想法:

  1. Output()方法接受两个参数,name和dest。您正在为name参数发送一个数组,可能不是您想要的。第二个dest将使用您指定的"D"
  2. Output()根据您为dest指定的值发送标头和数据。请参见下文

这意味着,如果你想继续执行代码,你可能需要将生成PDF的逻辑分离到一个新页面中,像你想的那样,使用target="_new"在新选项卡中打开它,然后提示用户下载,或者在这种情况下,你可以使用"I"值并在浏览器中打开它。

fpdf.php的输出()[行999-1036]:

switch($dest)
    {
        case 'I':
            // Send to standard output
            $this->_checkoutput();
            if(PHP_SAPI!='cli')
            {
                // We send to a browser
                header('Content-Type: application/pdf');
                header('Content-Disposition: inline; filename="'.$name.'"');
                header('Cache-Control: private, max-age=0, must-revalidate');
                header('Pragma: public');
            }
            echo $this->buffer;
            break;
        case 'D':
            // Download file
            $this->_checkoutput();
            header('Content-Type: application/x-download');
            header('Content-Disposition: attachment; filename="'.$name.'"');
            header('Cache-Control: private, max-age=0, must-revalidate');
            header('Pragma: public');
            echo $this->buffer;
            break;
        case 'F':
            // Save to local file
            $f = fopen($name,'wb');
            if(!$f)
                $this->Error('Unable to create output file: '.$name);
            fwrite($f,$this->buffer,strlen($this->buffer));
            fclose($f);
            break;
        case 'S':
            // Return as a string
            return $this->buffer;
        default:
            $this->Error('Incorrect output destination: '.$dest);
    }