我必须向用户发送 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 替代品的方法是否有效,或者在未来的版本中可能会被“禁止”?