2014-07-03 19 views
5

Cố gắng tải xuống tệp PDF cho trang sử dụng Góc. Đôi khi nó hoạt động, đôi khi không, trang được hiển thị với {{}} không được diễn giải.WKHTMLTOPDF và Angular

Làm cách nào để tải xuống tệp PDF cho trang được hiển thị đầy đủ (có một số yêu cầu http được thực hiện với Góc và nhiều thao tác dữ liệu được thực hiện trước khi dữ liệu được hiển thị)?

EDIT (code) (mã là không có liên quan):

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

Bạn có thể hiển thị một số mã không? – Sugar

+0

Ít nhất chúng ta có thể thấy phương thức res.render() không? – Pak

+0

Đã thêm nó vào câu hỏi, nhưng không có gì là phi thường. –

Trả lời

10

Bạn cần phải chắc chắn rằng Javascript có thời gian để thực hiện trước khi wkhtmltopdf thực hiện hiển thị của nó. Có ít nhất hai cách để làm điều này:

  1. Cách đơn giản nhưng khá xấu là phải vượt qua các tùy chọn --javascript-delay với một số số mili giây để cung cấp cho trang đủ thời gian để làm trước khi được chuyển đổi sang pdf.

  2. Cách phức tạp hơn một chút nhưng tốt hơn là chuyển tùy chọn --window-status bằng một số chuỗi. Nếu bạn làm điều đó, wkhtmltopdf sẽ không hiển thị bản pdf cho đến khi giá trị window.status bằng với chuỗi bạn đã chuyển với tùy chọn. Sau đó, trong ứng dụng của bạn, bạn nên đặt giá trị này theo cách thủ công sau khi trang của bạn hiển thị.

Các vấn đề liên quan