优雅的方式从文件中下载PDF

时间:2013-10-11 13:34:09

标签: php fpdf

我收到一个文件,当给定?ordernummer=123456从DB获取必要的数据并生成带有FPDF的PDF文件时,该文件强制下载PDF。工作良好。现在我想从另一个页面调用此文件,以便在按下按钮或链接时下载PDF文件。现在我正在使用include(),它可以工作,但在我看来并不是很优雅。我尝试过使用file_get_contents();,但那也没用。有没有人有一个好的解决方案?

$ordernummer = "204377";

$postdata = http_build_query(
    array(
        'ordernummer' => $ordernummer
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context  = stream_context_create($opts);
$result = file_get_contents('http://url.nl/pdf/generate_pakbon.php', false, $context);

2 个答案:

答案 0 :(得分:4)

您正在寻找的是PHP中的“强制下载”。这是通过正确设置文件头,然后读取PHP文件中的文件来完成的。

使用PHP强制下载:

如果是PDF文件,则需要以下标题:

header("Content-disposition: attachment; filename=pakbon_".intval($_GET['ordernummer']).".pdf");
header("Content-type: application/pdf");

filename=部分是您下载时强制使用的文件名。所以不是现有的文件。

设置标题后,您可以使用以下方法读取文件:

readfile('http://ledisvet.nl/pdf/generate_pakbon.php?ordernummer='.intval($_GET['ordernummer']);

如果您将它全部添加到文档中并将其命名为“downloadpakbon.php”,您只需链接到页面内的<a href="downloadpakbon.php?ordernummer=123456">download pakbon</a>即可下载。致谢这里解释的例子:http://webdesign.about.com/od/php/ht/force_download.htm

FPDF Only方法:

还有其他方法可供选择。 FPDF有一个名为'Output'的方法,您可能已经使用了它。此方法中有4个可能的参数,其中一个是'D'代表强制下载:http://www.fpdf.org/en/doc/output.htm

一种方法是在generate_pakbon.php中添加一个额外的参数,例如?download = true,然后将最终输出方法基于此参数:

if($_GET['download'] === true) {
  $pdf->Output('Order123.pdf', 'D');
} else {
  $pdf->Output('Order123.pdf', 'I');
}

答案 1 :(得分:2)

您的链接http://ledisvet.nl/pdf/generate_pakbon.php已在我的浏览器(Chrome)中下载。要确保这不是特定于浏览器的行为,请在generate_pakbon.php的开头添加以下行(注意:确保这是在任何其他输出之前)

header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=pakbon.pdf");
header("Pragma: no-cache");
header("Expires: 0");

然后我会将你引用的代码移到这个php文件中。