2016-11-22 3 views
0

Ich bin mit Symfony 3.1.2 mit KnpSnappyBundle 1.4 und ich folgte alles, was der Doc sagt hier (als pdf zu erzeugen): https://github.com/KnpLabs/KnpSnappyBundleKnpSnappyBundle kein Javascript ausführen

Aber es funktioniert nicht. Das PDF wird erzeugt, aber das Javascript nicht ausgeführt ...

Hier ist mein Symfony-Controller:

/** 
* @Route("/report") 
*/ 
public function report(Request $request) 
{ 
    $idTown = 1;//$request->request->get("idTown"); 

    $html = $this->renderView("@AppBundle/Resources/views/report.html.twig", array 
    (
     "idTown" => $idTown 
    )); 

    return new Response 
    (
     $this->get('knp_snappy.pdf')->getOutputFromHtml($html, 
       array(
        'enable-javascript' => true, 
        'no-stop-slow-scripts' => true, 
        'javascript-delay' => 5000) 
     ), 
     200, 
     array(
      'Content-Type'   => 'application/pdf', 
      'Content-Disposition' => 'attachment; filename="file.pdf"' 
     ) 
    ); 
} 

Hier ist die die HTML-Datei (report.html.twig):

<html> 
<head> 
    <script 
      src="https://code.jquery.com/jquery-2.2.4.min.js" 
      integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" 
      crossorigin="anonymous"></script> 

    <script> 
     $("body").html("okkkkkkkkkkkkkkkkkkkkkkk"); 
    </script> 

    <style> 
     html 
     { 
      background-color : red; 
     } 
    </style> 
</head> 

<body> 
</body> 

Wenn ich zur URL localhost/report gehe, erhalte ich eine Download-Aufforderung für eine rote Seite ohne Text. Für das, was es wert ist, habe ich auch mit nativem JavaScript (anstelle von jQuery) versucht und es hat auch nicht funktioniert. Aber Sie sehen, das CSS wird ausgeführt ...

Hilfe bitte, danke.

Antwort

0

Schließlich löste es. Ich weiß immer noch nicht, warum es nicht funktionierte, aber nach meiner Erfahrung mit diesen HTML-zu-PDF-Bibliotheken gibt es immer etwas, das irgendwann schief gehen wird.

Es ist mir gelungen, mein PDF erfolgreich zu erstellen (und herunterzuladen), indem ich das Originalwerkzeug verwende, auf dem all diese Bibliotheken aufgebaut sind: .

Hier ist mein Code, könnte es einige Leute helfen:

Die Symfony-Controller:

/** 
* @Route("/report") 
*/ 
public function report(Request $request) 
{ 
    $idTown = 1;//$request->request->get("idTown"); 

    exec("wkhtmltopdf --disable-smart-shrinking --no-outline --margin-top 0mm --margin-bottom 0mm --margin-right 0mm --margin-left 0mm http://localhost/test --javascript-delay 3000 rapport.pdf"); 

    $filename = "rapport.pdf"; 
    header('Content-Type: application/pdf'); 
    header("Content-disposition: attachment;filename=$filename"); 
    readfile($filename); 
    unlink("rapport.pdf"); 

    return new Response(); 
} 

Die Vorlage ist das, was Sie wollen. Kein Problem mit Assets, keine Notwendigkeit für absolutes Pfade oder all diese Scheiße, etc. Ich habe im Grunde 5 Stunden versucht, zu verschiedenen Bibliotheken zu am Ende allein zu verwenden ... Und ja, Sie können das JS und CSS ist getrennt Dateien. Ich schlage auch vor, Sie setzen in die PATH-Variable Ihres Servers, es sei denn, Sie möchten den vollständigen Pfad verweisen.

Ich hoffe, es hilft jemandem eines Tages.