如何使用Node.js创建PDF文件

13

我正在使用sails框架创建一个基于node.js的应用程序。我想要创建一个PDF格式的报告,其中需要包含一个使用chart.js生成的图表。数据从mongodb中获取,并在canvas上显示。如何使用node.js创建此图表的PDF文件?


我尝试了pdfkit。但问题是如何包含使用chart.js生成的图表数据(饼图)?其余部分都正常工作。 - Ritz
3个回答

9
您可以使用 pdf-creator-node 包来创建PDF文件。
以下是在Node应用程序中创建PDF的步骤:
1. 安装pdf creator包,命令如下:
``` npm i pdf-creator-node ```
2. 添加必要的包并读取HTML模板:
```javascript // 必要的包 var pdf = require("pdf-creator-node"); var fs = require('fs');
// 读取HTML模板 var html = fs.readFileSync('template.html', 'utf8'); ```
3. 创建您自己的HTML模板。

<!DOCTYPE html>
 <html>
    <head>
        <meta charset="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>                                        

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

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

或者 -

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

var options = { format: "A3", orientation: "portrait", border: "10mm" };

  1. 为输出提供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"
};

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

pdf.create(document, options)
    .then(res => {
        console.log(res)
    })
    .catch(error => {
        console.error(error)
    });


2
这并没有回答如何添加动态内容的原始问题。 - efkah
嗨,efkah,你可以在HTML中添加动态内容。请查看README文件https://www.npmjs.com/package/pdf-creator-node - Shyam Hajare

7

PDFKit.

Installation:

npm install pdfkit

例子:

var PDFDocument = require('pdfkit');

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

我应该在哪里编写这段代码?在控制器还是JS文件中,@Nick Bull? - Ritz
5
我尝试了这个,但问题是如何将使用chart.js生成的图表数据(饼图)包含进去?其他部分都正常。 - Ritz
这如何回答如何包含chart.js输出的问题? - Lee Goddard

0
使用 NodeJS 生成 PDF 的最简单方法是使用 pdf-master 包。您可以使用一个函数调用使用 HTML 生成静态和动态 PDF。
安装
npm install pdf-master

示例

步骤1 - 添加所需的软件包并生成PDF文件

const express = require("express");
const pdfMaster = require("pdf-master");
const app = express();

app.get("", async (req, res) => {

  var PDF = await pdfMaster.generatePdf("template.hbs");

  res.contentType("application/pdf");
  res.status(200).send(PDF);
});

generatePdf() 语法和参数

generatePdf(
  templatePath, //<string>
  data, //<object>   Pass data to template(optional)
  options //<object>   PDF format options(optional)
);

步骤2 - 创建您的HTML模板(将模板保存为.hbs扩展名而不是.html)

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8" />
      </head>
      <body>
        <h1>Hello World</h1>
      </body>
    </html>

在模板和 PDF 格式选项中呈现动态数据

const express = require("express");
const pdfMaster = require("pdf-master");

const app = express();

app.get("", async (req, res) => {

  var students = {
      {
          id: 1,
          name: "Sam",
          age: 21
      },
      {
          id: 2,
          name: "Jhon",
          age: 20
      },
      {
          id: 3,
          name: "Jim",
          age: 24
      }
  }

  let options = {
    displayHeaderFooter: true,
    format: "A4",
    headerTemplate: `<h3> Header </h3>`,
    footerTemplate: `<h3> Copyright 2023 </h3>`,
    margin: { top: "80px", bottom: "100px" },
  };

  let PDF = await pdfMaster.generatePdf("template.hbs", students, options);
  res.contentType("application/pdf");
  res.status(200).send(PDF);
});

想要了解更多关于 pdf-master 的内容请访问


PDF文件是在哪里创建的?是否可以指定路径? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接