我正在使用JasperPHP从模板创建PDF。
然后我立即尝试显示它。
如何在显示之前确保完全创建?
我正在检查文件是否存在但PDF已损坏,此时我假设它仍在创建。
我也试过使用flock,用独占锁打开它,但这似乎有效,即使PDF没有完全渲染。
这就是我正在做的事情(dd仅用于测试,它永远不会在这里):
/**
* Check that we can lock a file
* this ensures that it has been completely created.
*
* @param $filename
* @return bool
*/
function stillWriting($filename)
{
$stillWriting = true;
if($fp = fopen($filename, "r+"))
{
if (flock($fp, LOCK_EX)) // Try to get an exclusive lock on the file
{
flock($fp, LOCK_UN); // Unlock - we're just checking
$stillWriting = false;
}else{
dd('failed');
}
fclose($fp);
}
return $stillWriting;
}
米克
修改 - 添加更多详情
这是创建PDF的地方:
exec($this->the_command, $output, $return_var);
我正在使用https://github.com/cossou/JasperPHP
执行JasperStart [https://sourceforge.net/projects/
这是显示PDF的地方:
return Response::make(file_get_contents($this->outputFilename .'.pdf'), 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="' . $this->outputFilename .'.pdf' .'"'
]);
我得到的实际问题是Chrome说"无法加载PDF文档"我猜测这是一个时间问题。文件正确打开如果我然后转到Windows并双击。
答案 0 :(得分:0)
JasperPHP有一个标记$background = true
。
如果我将其设置为false,则看起来它在继续之前等待编译完成。
米克