在新标签页中从FPDF打开PDF

时间:2013-12-05 20:20:59

标签: php html codeigniter pdf fpdf

如果客户希望在创建业务单位时生成和下载报告,则会有一个客户点击的流程。该报告将采用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下载或“在新标签页中打开”,然后执行下一行,帮助页面重定向并打开所需的视图。

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

对此有任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您应该在运行FPDF代码之前创建新标签页。

备选您可以将pdf保存为文件,并使用正确的标题打开新选项卡。 看到这个问题:Show a PDF files in users browser via PHP/Perl

代码按设计终止,除非您将其保存为文件或字符串。

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

如果您可以在输出之后详细说明您想要做什么,我可以提供更多帮助。

答案 1 :(得分:2)

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

  1. Output()方法接受2个参数,name和dest。您正在为name参数发送数组,可能不是您想要的。第二个,dest,将使用您指定的“D”。
  2. Output()根据您为dest指定的值发送标头和数据。见下文。
  3. 这意味着如果您想继续执行代码,您可能需要将生成此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);
        }