我必须向用户发送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的方法是否有效,或者在将来的版本中可能会被“禁止”?
答案 0 :(得分:0)
如果返回到客户端的标头适合内容,您可以从任何URL发送您喜欢的任何内容。