如何在节点js中创建pdf文件

Rit*_*itz 8 javascript pdf mongodb node.js chart.js

我正在创建一个node.js利用风帆框架的应用程序。我想创建 PDF 格式的报告。该报告需要包含一个使用chart.js. 数据从 mongodb 获取并显示在canvas. 如何使用 node.js 创建此图表的 PDF 文件?

Nic*_*ull 8

PDFKit.

安装:

npm install pdfkit
Run Code Online (Sandbox Code Playgroud)

例子:

var PDFDocument = require('pdfkit');

doc = new PDFDocument;    
doc.pipe(fs.createWriteStream('output.pdf'));    
doc.font('fonts/PalatinoBold.ttf').fontSize(25).text(100, 100);
Run Code Online (Sandbox Code Playgroud)

  • 我试试这个。但问题是我如何包含使用 chart.js 生成的图表数据(饼图)?休息运作良好。 (4认同)

Shy*_*are 6

您可以使用pdf-creator-node包来创建 PDF

以下是在节点应用程序中创建 PDF 的步骤

  1. 安装通过以下命令安装pdf creator包

    npm i pdf-创建者节点

  2. 添加所需的包并读取 HTML 模板

    //需要的包
    var pdf = require("pdf-creator-node")
    var fs = require('fs')

    // 读取 HTML 模板
    var html = fs.readFileSync('template.html', 'utf8')

  3. 创建您的 HTML 模板

<!DOCTYPE html>
 <html>
    <head>
        <mate charest="utf-8" />
        <title>Hello world!</title>
    </head>
    <body>
        <h1>User List</h1>
        <ul>
            {{#each users}}
            <li>Name: {{this.name}}</li>
            <li>Age: {{this.age}}</li>
            <br>
        {{/each}}
        </ul>
    </body>
</html>                                        
Run Code Online (Sandbox Code Playgroud)

  1. 根据您的需要提供格式和方向

    "height": "10.5in", // 允许的单位:mm, cm, in, px
    "width": "8in", // 允许的单位:mm, cm, in, px

    或者 -

    "format": "Letter", // 允许的单位:A3、A4、A5、Legal、Letter、小报 "orientation": "portrait", // 纵向或横向

    var options = { 格式:“A3”,方向:“纵向”,边框:“10mm”};

  2. 为输出提供 HTML、用户数据和 pdf 路径

var users = [
    {
        name:"Shyam",
        age:"26"
    },
    {
        name:"Navjot",
        age:"26"
    },
    {
        name:"Vitthal",
        age:"26"
    }
]
var document = {
    html: html,
    data: {
        users: users
    },
    path: "./output.pdf"
};
Run Code Online (Sandbox Code Playgroud)

  1. 设置完所有参数后,只需将文档和选项传递给 pdf.create 方法。

pdf.create(document, options)
    .then(res => {
        console.log(res)
    })
    .catch(error => {
        console.error(error)
    });
Run Code Online (Sandbox Code Playgroud)

  • 这并没有回答如何添加动态内容的原始问题 (2认同)