在同一个请求中发送HTML和PDF文件是否正确?

时间:2013-05-17 10:11:33

标签: php http http-headers

我必须向用户发送PDF,但此PDF是由PHP(服务器端)执行的命令行工具生成的。当用户点击链接时,执行此操作:

window.open($(this).attr('href'), "mywindow",
            "height=600,width=600,menubar=0,location=0,status=0,toolbar=0");

新窗口由PHP生成:

<?php
ob_start();
?>
 Web page contents to be printed
<?php
$content = ob_get_contents();
ob_end_flush();

$input = "/tmp/input.html";
$output = "/tmp/output.pdf";

file_put_contents($input, $content);
create_pdf($input, $output);

$state = filesize($output);
if ($state !== FALSE && $state != 0) {
    header('Content-Type: application/pdf');
    header('Content-Disposition: inline; filename=file.pdf');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($output));

    ob_clean();
    flush();
    @readfile($output);
}

unlink($input);
unlink($output);

为什么这样?因为如果生成PDF文件时出现问题,则不会发送,但是将呈现等效的HTML文件(if stament),如果发送PDF时出现问题(有时会发生),则用户将拥有可打印的HTML替代方案。

我在chrome上测试了这个并且它工作得很完美(在生成时显示内联PDF或在未生成时显示等效网页)。我所拥有的Firefox不支持内联PDF(无插件),所以它只是要求用户下载PDF并关闭窗口(预期结果)。

我怀疑这种生成替代PDF的方法是否有效,或者在将来的版本中可能会被“禁止”?

1 个答案:

答案 0 :(得分:0)

如果返回到客户端的标头适合内容,您可以从任何URL发送您喜欢的任何内容。