2017-01-04 1 views
0

Ich versuche, eine PDF aus einer meiner Ansichten zu erstellen.Erstellen Sie PDF mit Node.js, Jade und Express

Diese Ansicht wird mit Jade und Express gerendert, lädt einige Javascript, einige CSS-Dateien, erweitert einige Jade-Ansichten und fragt eine Datenbank ab, um verschiedene Graphen zu füllen. Der Rendervorgang dauert ca. 7 Sekunden, da er nicht sehr gut optimiert ist.

Die GET-Anforderung für die Ansicht verwendet außerdem passport und connect-ensure-login, um zu überprüfen, ob der Benutzer vor dem Rendern angemeldet ist, und übergibt einige Variablen, die Jade beim Rendern verwenden soll. Dies ist der Handler-Code:

var express = require('express'); 
var router = express.Router(); 
var moment = require('moment'); 

router.get('/', require('connect-ensure-login').ensureLoggedIn(), function (req, res, next) { 
    res.render('summary', { 
     title: 'Summary', 
     day: moment().format('D'), 
     month: moment().locale('es').format('MMMM'), 
     year: moment().format('YYYY') 
    }); 
}); 

module.exports = router; 

Dies ist die Jade-Datei, die in PDF konvertiert werden muss:

extends layout 

block content 

    .container-fluid 

     #banner 

     .chart#chart1 
     .chart#chart2 
     .chart#chart3 

     script(type='text/javascript', src='/javascripts/summary.js') 

und dies ist die Jade-Datei (Layout), die erweitert wird:

doctype html 

html 
    head 
     meta(charset='utf-8') 
     meta(http-equiv='X-UA-Compatible', content='IE=edge') 
     meta(http-equiv='content-type', content='text/html; charset=UTF-8') 
     meta(content='width=device-width, initial-scale=1', name='viewport') 
     title=title 

     link(rel='stylesheet', type='text/css', href='/stylesheets/styles.css') 

     script(type='text/javascript', src='/assets/jquery-3.1.1/jquery-3.1.1.min.js') 
     script(type='text/javascript', src='/assets/bootstrap-3.3.7/js/bootstrap.min.js') 

    body 
     .page-wrapper 
      block content 

Wie würde ich das Laden der Seite und das Erstellen eines Screenshots und das Konvertieren in ein PDF oder das Rendern als PDF aus der Jade-Datei starten?

Ich habe von PhantomJS gehört, aber ich kann keine Informationen finden, die auf dem neuesten Stand sind.

Wenn mir jemand helfen könnte wäre ich sehr dankbar.

Antwort

0

Was Sie tun können, ist die Jade/Mops zu verwenden, um die HTML-Datei mit den gewünschten Werten zu erzeugen, ist es im File System (Async Art und Weise) zu speichern, sobald dies geschehen ist, benutzen Sie diese Bibliothek:

https://www.npmjs.com/package/html-pdf

Zum Lesen (Async Weg) der HTML-Datei, die Sie im Dateisystem gespeichert und in eine PDF-Datei konvertieren, und schließlich streamen Sie es auf den Client.

Vielleicht können Sie eine andere Bibliothek verwenden, anstatt in das Dateisystem zu schreiben, es direkt zum PDF-Konverter zu leiten und es wird schneller.

Wenn sich die Vorlage häufig ändert, muss dies für jede Anforderung durchgeführt werden, andernfalls können Sie sie zwischenspeichern und erst beim ersten Mal generieren, dann feststellen, ob sie bereits vorhanden ist und sie an die Antwort übergeben.

Ich hoffe, es hilft.

Verwandte Themen