2015-11-12 1 views
2

J'ai décidé de poser cette question parce que cela me rend fou et je ne sais pas ce que je peux faire parce que j'ai essayé tout ce que je peux penser.Impossible de télécharger le fichier PDF généré hébergé dans xampp

Je construis un outil web avec Laravel. Il y a une option pour générer quelques rapports en pdf et voici quand mon problème commence.

Mes fonctions pour créer ce fichier pdf sont.

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); 
     } 

    } 

La fonction generarPDF construit juste une vue qui sera le contenu du fichier pdf.

Le fichier est créé avec succès mais lorsque j'essaie de le télécharger, je ne peux pas le faire car (selon le chrome) il y a une erreur de réseau.

Chose étrange est que tout fonctionne très bien dans ma boîte Linux, qui n'utilise pas xampp mais apache + php + mysql installé à partir de dépôts. Si je supprime le code pour construire le fichier et ne laisse que celui de télécharger un ancien créé, fonctionne parfaitement, je pensais que cela pourrait être une question de processus de Symfony fonctionnant de manière asynchrone, donc fait attendre jusqu'à la fin mais avec pas de chance. Xampp est installé sur un serveur Windows 8.

Je ne sais pas ce que je peux faire d'autre. Peut être un bug xampp?

+0

Est-ce qu'il déclenche une exception ou que vous trouvez quelque chose dans error.log? –

+0

Rien du tout. Tout semble bien fonctionner. C'est vraiment étrange. – Dhouard

+0

Vous stockez le pdf généré et en pointant le lien pour le télécharger ou simplement générer un lien qui génère et télécharge le pdf? –

Répondre

0

Avez-vous essayé de mettre l'en-tête http dans le fichier?

comme mentionné dans PHP manual pour en-tête http,

peut vous devez essayer ceci:

<?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'); 
?> 

Je ne sais pas si l'en-tête est existe déjà dans votre code ou non, CMIIW: -)

+0

J'ai essayé d'envoyer des en-têtes et de lire le fichier aussi. Je pense que c'est quelque chose lié à xampp sur Windows. – Dhouard

1

Voici la façon logique, comment je gérer

Étape 1: d'abord un lien comme celui-ci

yourapp/generatepdf/14

Il devrait être comme ça Cliquez ici

ou

si vous pointez directement dans un fichier

Cliquez ici

savoir, 14 est le param que vous passez

Étape 2: l'intérieur de votre contrôleur

Generate/sortie en format pdf sur la base des param d'entrée

Étape 3: Ainsi, une fois le lien est ouvert il va générer et télécharger le pdf en ce qui concerne votre param

Hope this vous aide

0

Essayez cette ...

$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); 

    }