无法下载xampp中托管的生成的PDF文件

时间:2015-11-12 08:56:31

标签: php symfony laravel pdf

我已经决定询问这个问题,因为这让我发疯,我不知道我能做些什么,因为我尝试了我能想到的一切。

我正在使用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错误吗?

3 个答案:

答案 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);

    }