我已经决定询问这个问题,因为这让我发疯,我不知道我能做些什么,因为我尝试了我能想到的一切。
我正在使用laravel构建一个Web工具。可以选择以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 Process异步运行的问题,所以让它等到完成但没有运气。
xampp安装在Windows 8服务器中。
我不知道还能做些什么。可以是一个xampp错误吗?
答案 0 :(得分:1)
以下是逻辑方式,我将如何处理
第1步:首先要有这样的链接
yourapp / generatepdf / 14
应该是这样点击这里
或
如果直接指向文件
点击此处
即,14是您传递的参数
第2步:在您的控制器内
根据输入参数生成/输出pdf
第3步:因此,一旦链接打开,它将生成并下载与您的参数相关的pdf
希望这有助于你
答案 1 :(得分:0)
您是否尝试将http标头放入文件中?
,如PHP manual中提到的http标头,
你可以试试这个:
<?php
// We'll be outputting a PDF
header('Content-Type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>
我不确定代码中是否已存在标题,CMIIW: - )
答案 2 :(得分:0)
试试这个......
$filename=$_SERVER['DOCUMENT_ROOT']."/dirctory/your.pdf";
$realname="filename.pdf";
if (file_exists($filename))
{
// send headers to browser to initiate file download
header('Cache-control: private');
header ('Content-Type: application/pdf');
header ('Content-Disposition: attachment; filename="' . $realname . '"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
readfile($filename);
}