2014-07-03 4 views
5

Der Versuch, die PDF für eine Seite zum Download, die Angular verwendet. Manchmal funktioniert es, manchmal nicht, die Seite wird gerendert mit {{}} nicht interpretiert.wkhtmltopdf und Angular

Wie kann ich die PDF für den Voll gerenderte Seite herunterladen (es gibt einige HTTP-Anfragen mit kantigem getan, und viele Datenmanipulation, bevor die Daten durchgeführt) angezeigt?

EDIT (Code) (der Code ist nicht relevant):

Back-end:

... 
wkhtmltopdf(url, options, function(code, signal) { 
    //'url' points to a route that has 'res.render()' binded to it 

    //Download the file 
}); 
... 

res.render('template', { data: data }); 

... 

Front-end:

<html> 
     <head> 
       ... 
     </head> 

     <body> 
       <div ng-app=".." class="container" ng-controller=".."> 

       </div> 

       <script src='/angular/lib/jquery/jquery.min.js'></script> 
       <script src='//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js'></script> 
       <script src='/angular/lib/bootstrap/bootstrap.min.js'></script> 
       <script src='/angular/lib/angular/angular.min.js'></script> 
       <script src='/angular/lib/underscore/underscore.js'></script> 
       <script src='/angular/lib/morris/morris.min.js'></script> 
       <script src='/angular/lib/morris/raphael-min.js'></script> 

       ... 
     </body> 
</html> 
+0

Können Sie etwas Code zeigen? – Sugar

+0

Können wir wenigstens die res.render() Methode sehen? – Pak

+0

hinzugefügt es um die Frage, aber es ist nichts Besonderes. –

Antwort

10

Sie müssen sicherstellen, dass Javascript Zeit hat auszuführen, bevor wkhtmltopdf sein Rendering ausführt. Es gibt mindestens zwei Möglichkeiten, dies zu tun:

  1. Die einfache, aber eher schlecht ist die --javascript-delay Option mit einem gewissen Anzahl von Millisekunden passieren der Seite genug Zeit zu geben, bevor zu machen, um PDF-Format konvertiert werden.

  2. Die etwas komplizierter, aber besser ist es, die Art und Weise --window-status Option mit einigen Zeichenfolge zu übergeben. Wenn Sie das tun, wkhtmltopdf das pdf nicht machen, bis window.status der Wert auf den String gleich Sie mit der Option übergeben. In Ihrer App sollten Sie diesen Wert dann manuell festlegen, nachdem Ihre Seite gerendert wurde.