0

我必须向用户发送 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声明),如果发送 PDF 时出现问题(有时会发生),用户将有一个可打印的 HTML 替代方案。

我已经在 chrome 上对此进行了测试,它运行良好(在生成时显示内联 PDF,或者在未生成时显示等效网页)。我拥有的 Firefox 不支持内联 PDF(无插件),因此它只是要求用户下载 PDF 并关闭窗口(预期结果)。

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

4

1 回答 1

0

您可以从任何 URL 发送您喜欢的任何内容,只要返回给客户端的标头适合该内容。

于 2013-05-17T10:19:15.430 回答