【问题标题】:Nodejs Generate document on BE and send to user (FE)Nodejs 在 BE 上生成文档并发送给用户(FE)
【发布时间】:2020-10-26 21:33:32
【问题描述】:

我不知道如何处理这个问题,所以我没有要显示的代码,我只需要(我认为)一些指导。 我有一个 nodeJs 服务器 (API) 和一个 vueJs 前端。 我有一个端点,可以给我一个摘要(它从用户更改为用户)并且数据来自 mongodb,我想导出/生成一个 pdf / doc。我该怎么做?步骤是什么? (我想要一个 EP 来生成文档并下载它)我需要使用 ejs 创建一个模板吗?之后呢? 提前致谢

【问题讨论】:

    标签: javascript node.js document generate


    【解决方案1】:

    您将不得不使用某种节点 PDF 生成库在后端生成文档。您可以使用 ejs 创建一个 html 页面来循环浏览这些项目并使用 pdf-creator-node 包制作它的 PDF。大多数示例都显示在链接文档中,用于制作带有一些标记的 PDF。

    【讨论】:

      【解决方案2】:

      您将不得不在 Node API 中创建一个 pdf 文档,这可能是一项乏味的工作。不过过段时间应该就能搞定了。

      您有 2 个选项:pdfkit 和 pdf-creator-node(都是 npm 包)。我会使用 pdf-creator-node 因为你可以使用模板(不确定你是否可以在 pdfkit 中这样做)。

      1. 安装包

        npm i pdf-creator-node

      2. 创建模板.html

        <html>
          <head>
             <mate charest="utf-8" />
              <title>Hello world</title>
          </head>
          <body>
             <h1>Example List</h1>
             <ul>
                {{#each person}}
                <li>Name: {{this.name}}</li>
                <li>Age: {{this.age}}</li>
                <br>
                {{/each}}
             </ul>
           </body>
        </html>   
        
      3. 在你的节点文件中添加

         var pdf = require("pdf-creator-node")
         var fs = require('fs')
         var html = fs.readFileSync('template.html', 'utf8') 
        
      4. 为您的 pdf 创建大小/选项

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

        查看documentation了解有关格式的更多详细信息

      5. 创建您的人员列表

        var users = [
        {
            name:"foo",
            age:"30"
        },
        {
            name:"bar",
            age:"22"
        },
        {
            name:"baz",
            age:"9"
        }
        ]
        var document = {
        html: html,
        data: {
            users: users
        },
        path: "./output.pdf"
        };
        
      6. 然后最后使用pdf.create制作pdf

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

      然后你会使用类似res.sendfile(output.pdf) 的东西将它发送到客户端,或者你想这样做

      【讨论】:

      • 感谢它对我帮助很大!我完成了使用node-html-pdf。您是否认为有一种方法可以生成和下载而无需将其保存在磁盘上?因为我不需要将 PDF 保存在服务器端,只需要生成和下载它(目前一切正常,但我将文件保存/保存在磁盘上......)谢谢@MaxGertner
      • 嗯,好点子。不过我不完全确定。你可以有一个常量文件名,每次你需要生成一个新的 pdf 时它都会被覆盖。然后您可以将 pdf 转换为 blob 并将 blob 发送到客户端
      • 嗨@MaxGertner,我看了一下node-html-pdf,但我没有看到任何关于用参数填充html的内容..它仅适用于静态资源吗?
      【解决方案3】:

      选项 1

      您可以尝试在前端捕获数据(我假设它是 json 格式),然后在前端使用一些 jquery 插件以生成所需格式的文档, 示例插件enter link description here

      选项 2

      使用This等npm包生成文档

      理想且重要的安全方式是选项 2

      【讨论】:

        猜你喜欢
        • 2022-11-01
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-04
        • 2023-01-12
        • 2014-08-31
        相关资源
        最近更新 更多