Създайте PDF с помощта на Node.js, Jade и Express

Опитвам се да създам PDF от един от моите изгледи.

Този изглед се изобразява с помощта на Jade и Express, зарежда някои Javascript, някои CSS файлове, разширява някои изгледи на Jade и прави заявки към база данни за попълване на различни графики. Процесът на изобразяване отнема около 7 секунди, защото не е много добре оптимизиран.

Освен това GET заявката за изгледа използва passport и connect-ensure-login, за да провери дали потребителят е влязъл преди рендиране и предава някои променливи, които Jade да използва при рендиране. Това е кодът на манипулатора:

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;

Това е Jade файлът, който трябва да бъде преобразуван в PDF:

extends layout

block content

    .container-fluid

        #banner

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

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

И това е Jade файлът (оформление), който е разширен:

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='/bg/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

Как да заредя страницата и да направя екранна снимка и да я конвертирам в PDF или да я изобразя като PDF от Jade файла?

Чувал съм за PhantomJS, но не мога да намеря информация, която да е актуална.

Ако някой може да ми помогне, ще съм много благодарен.


person naranjja    schedule 04.01.2017    source източник


Отговори (1)


Това, което можете да направите, е да използвате jade/pug, за да генерирате .html файла с желаните стойности, да го запишете във файловата система (асинхронен начин), след като това стане, използвайте тази библиотека:

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

За да прочетете (асинхронен начин) .html файла, който сте записали във файловата система и да го конвертирате в pdf, и накрая да го предавате поточно към клиента.

Може би можете да използвате друга библиотека, за да вместо да пишете във файловата система, да я насочите директно към PDF конвертора и ще бъде по-бързо.

Ако шаблонът ще се променя често, това ще трябва да се прави за всяка заявка, в противен случай можете да го кеширате и да го генерирате само първия път, след което да откриете дали вече е там и да го насочите към отговора.

Дано помогне.

person JCLG    schedule 04.01.2017