【问题标题】:Create PDF using Node.js, Jade and Express使用 Node.js、Jade 和 Express 创建 PDF
【发布时间】:2017-01-04 20:40:08
【问题描述】:

我正在尝试从我的一个视图创建 PDF。

此视图使用 Jade 和 Express 呈现,加载一些 Javascript、一些 CSS 文件、扩展一些 Jade 视图,并查询数据库以填充不同的图形。渲染过程大约需要 7 秒,因为它没有得到很好的优化。

另外,视图的 GET 请求使用passportconnect-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;

这是需要转成PDF的Jade文件:

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='/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 或将 Jade 文件中的 PDF 渲染为 PDF?

我听说过 PhantomJS,但我找不到最新的信息。

如果有人可以帮助我,我将非常感激。

【问题讨论】:

    标签: node.js pdf express phantomjs pug


    【解决方案1】:

    您可以做的是使用jade/pug 生成具有所需值的.html 文件,完成后将其保存在文件系统中(异步方式),使用此库:

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

    读取(异步方式)您保存在文件系统中的.html文件并将其转换为pdf,最后将其流式传输到客户端。

    也许您可以使用另一个库来代替写入文件系统,将其直接通过管道传输到 PDF 转换器,这样会更快。

    如果模板会频繁更改,则必须为每个请求都这样做,否则,您可以缓存它,只在第一次生成它,然后检测是否已经存在并将其通过管道传递给响应。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 2015-05-24
      • 2012-08-07
      • 2011-11-23
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多