Проверьте, что PDF был создан перед отображением?

Я создаю PDF, из шаблона, используя JasperPHP.

Я тогда сразу пытаюсь это отобразить.

Как я могу убедиться, что он полностью создан перед отображением?

Я проверяю, что файл существует, но PDF поврежден, поэтому я предполагаю, что он все еще создается.

Я также пытался использовать flock, чтобы открыть его с эксклюзивной блокировкой, но, похоже, это работает, даже если PDF не полностью отрисован.

Это то, что я делаю (дд только для тестирования, он никогда не попадает сюда):

/**
* 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 и дважды щелкните.

-1

Решение

JasperPHP имеет флаг $background = true,

Если я установлю это в false, похоже, что он ожидает завершения компиляции, прежде чем продолжить.

Мик

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]