如何为使用FPDF库下载的PDF提供自定义名称?

时间:2014-06-23 08:32:54

标签: php html pdf fpdf

我期望的帮助最后写成问题。如果您已经知道解决方案,请参考以便您可以跳过整个解释并节省时间。

我正在使用FPDF库。默认情况下,库允许我在浏览器中打开PDF。

我希望下载文件而不是在浏览器中打开,因此我按下了一个按钮,并为其提供了下载属性,如下所示。

<a download href="pdf_conversion/actionpdf.php?mypdf=<?php echo $mypdf ?>"><button>Download PDF</button></a>

现在,下载工作正常,正在保存的文件名为 doc.pdf ,如果我理解正确,则是以下库提供给它的默认名称输出功能。

function Output($name='', $dest='')
{
// Output PDF to some destination
if($this->state<3)
    $this->Close();
$dest = strtoupper($dest);
if($dest=='')
{
    if($name=='')
    {
        $name = 'doc.pdf';
        $dest = 'I';
    }
    else
        $dest = 'F';
}
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);
}
return '';
}

actionpdf.php 结束时调用输出功能

$pdf->Output();

现在,我需要文件名为 mypdf 的值,该值是使用GET方法从URL获取的。我相信我应该在 actionpdf.php 页面的输出功能中传递 $ mypdf 作为参数。我被迫相信我的整个逻辑非常错误,或者我传递变量的方式非常错误,因为将变量传递为 $ pdf-&gt;输出($ mypdf); 结果在保存文件弹出窗口中, actionpdf.htm 作为文件。

问题:如何使用GET方法从URL获取变量的值,并将该值作为正在下载的PDF文件的名称。我正在使用FPDF库。

2 个答案:

答案 0 :(得分:1)

如果您只想使用GET在URL路径中获取参数,请执行以下操作:

$myparameter = $_GET["myparameter"];

在这里,$ myparameter将包含在URL中传递的值:http://url/myfile.php?myparameter=myvalue

现在你所要做的就是将它传递给Output方法:

$pdf->Output($myparameter);

只是为了记录,你最好测试你正在寻找的参数是否存在,假设你的默认PDF文件应该是“pdf.pdf”:

$mypdf = "pdf";

if(isset($_GET["filename"]) && is_string($_GET["filename"])) {
    $mypdf = $_GET["filename"];
}

//add the following line, NOTICE THE DOT BEFORE THE EQUAL (.=)
$mypdf .= ".pdf";

$pdf->Output($mypdf);

答案 1 :(得分:-1)

我弄清楚问题是什么。我所要做的就是,像我一样传递参数,然后对输出函数进行一些小改动,如下所示。

if($dest=='')
{
if($name=='')
{
    $name = 'doc.pdf';
    $dest = 'I';
}
else
    $dest = 'I';
 }

原始代码在 else 条件中有 $ dest =&#39; F&#39; ,这导致了问题。