【发布时间】:2015-11-12 08:56:30
【问题描述】:
我决定问这个问题,因为这让我发疯,我不知道该怎么办,因为我尝试了我能想到的一切。
我正在用 laravel 构建一个网络工具。有一个选项可以生成一些 pdf 格式的报告,这就是我的问题开始的时候。
我构建这个 pdf 文件的功能是。
public function generarPDF() {
$inicio = Input::get('inicio');
$fin = Input::get('fin');
$datos = $this->datosInforme($inicio, $fin);
$html = View::make('reportes.pdf', array('datos' => $datos,
'inicio'=> $inicio,
'fin' => $fin));
return $html;
}
public function descargarArchivoPDF() {
$inicio = Input::get('inicio');
$fin = Input::get('fin');
$nombreArchivo = storage_path().'/pdf/report-'.(new DateTime())->format('Y-m-d').'.pdf';
if (file_exists($nombreArchivo)) {
unlink($nombreArchivo);
}
$command = 'wkhtmltopdf -O Landscape -s A4 -T 25 -R 20 -B 25 -L 20 "';
$url = url('/generar-pdf-reporting');
$argumentos = array();
if (!empty($inicio)) {
$argumentos[] = 'inicio='.$inicio;
}
if (!empty($fin)) {
$argumentos[] = 'fin='.$fin;
}
if (count($argumentos) > 0) {
$argumentos = '?'.implode('&', $argumentos);
}
else {
$argumentos = '';
}
$url .= $argumentos;
$command .= $url.'" '.$nombreArchivo;
// return $command;
$process = new Symfony\Component\Process\Process($command);
$process->run();
if (!$process->isSuccessful()) {
throw new Symfony\Component\Process\Exception\ProcessFailedException($process);
}
else {
return Response::download($nombreArchivo);
}
}
generarPDF 函数只是构建一个视图,该视图将是 pdf 文件的内容。
文件创建成功,但是当我尝试下载它时,我无法下载,因为(根据 chrome)存在网络错误。
奇怪的是在我的 linux 机器上一切正常,它不使用 xampp,而是从存储库安装的 apache+php+mysql。
如果我删除了构建文件的代码并只留下一个下载以前创建的文件,那么工作完美无缺,我认为这可能是 Symfony 进程异步运行的问题,所以让它等到完成但没有运气。
xampp 安装在 Windows 8 服务器中。
我不知道我还能做什么。会不会是 xampp 的 bug?
【问题讨论】:
-
它是否抛出任何异常或您在 error.log 中找到任何内容?
-
什么都没有。一切似乎都运作良好。真的很奇怪。
-
您是存储生成的 pdf 并将链接指向它以下载还是仅生成生成和下载 pdf 的链接?
-
当我点击按钮生成pdf文件时,该函数会创建文件,然后让浏览器下载它。这就是我使用“return Response::download()”函数的原因。
-
为什么不能生成指向生成的 pdf 的成功事件链接?