【问题标题】:how to export json data to pdf file with specify format with Nodejs?如何使用 Nodejs 将 json 数据导出为具有指定格式的 pdf 文件?
【发布时间】:2016-01-01 16:22:54
【问题描述】:

我是 nodejs 的初学者。我正在编写一个程序,它将文本数据从 json 文件转换为 pdf 文件: 这是我的输入文件(input.json)

{

"Info":

    {
    "Company": "ABC",
    "Team": "JsonNode"
    },
    "Number of members": 4,
    "Time to finish": "1 day"
}

我想将其转换为具有以下样式的 .pdf (report.pdf) 文件。

  1. 信息

    1.1 公司

    ABC

    1.2 团队

    JsonNode

  2. 成员数 4
  3. 完成时间 1 天

我的问题是:

1:如何将 input.json 文件的样式更改为 report.pdf 的样式。

2:如何将.json格式转换为.pdf格式。

谁能帮帮我。

提前致谢!

【问题讨论】:

  • 有很多html到pdf的服务。我建议您使用其中之一并将您的 json 转换为格式化的 html。然后你可以将你的 html/json 输出发送到他们的服务,它会返回一个 pdf 文件

标签: json node.js pdf


【解决方案1】:

我认为你必须制作 html 模板,然后将你的 json 渲染成 html 模板。

 <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<table> 
<tr>Company</tr>
{{info.Company}}
<tr>Team</tr>
{{info.Team}}
</table>
</body>
</html>

现在在您的 js 文件中,您必须提供模板的路径并创建一个文件夹以存储您的 pdf 文件。

     var pdf = require('html-pdf');
 var options = {format: 'Letter'};
exports.Topdf = function (req, res) {
 var info = {

 "Company": "ABC",
 "Team": "JsonNode",
 "Number of members": 4,
"Time to finish": "1 day"
}
res.render('path to your tempalate', {
    info: info,
}, function (err, HTML) {
    pdf.create(HTML, options).toFile('./downloads/employee.pdf', function (err, result) {
        if (err) {
            return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
            });
        }
    })
  })
 }

试试这个希望它有效。

【讨论】:

  • @Vishnu:是的,我已经改正了,但还是不行
  • 我遇到了这个问题:res.render('./template.html', { ^ TypeError: Cannot read property 'render' of undefined
  • 嗨@MariyaJames。我按照你的指导做了,但我的方法可能有一些异常:我使用你的 .js 代码并将其另存为(test.js)然后我制作了另一个 .js 文件(test1.js),内容如下:var test =要求(“./test.js”); test.topdf();之后我运行 test1.js 文件。 “节点 test1.js”。上面的问题仍然存在,请您给我更详细的建议。以及您是如何运行 .js 代码的?
  • app.get('/', test.topdf());正如我告诉你的,如果你使用的是 express,你必须使用路由调用函数。正如我在这里展示的。然后只有你会有 req,res 对象。试试expressjs.com/guide/routing.html
  • 非常感谢。我和你的指南一样,我的代码工作得很好!
【解决方案2】:

你必须使用html来创建布局,

<ul>
 <li>Info: </li>
 <ul>
  <li>Company: {{info.Company}}</li>
  <li>Team: {{info.Team}}</li>
 </ul>
 <li>Number of members: {{info.numberofmembers}}</li>
 <li>Time to finish: {{info.timetofinish}}</li>
<ul>

现在您必须将此 html 存储在一个变量中,例如“布局”。 然后将pdf创建为,

function generatePdf(layout, file) {
console.log('generating pdf');

var wkhtmltopdf = require('wkhtmltopdf');

wkhtmltopdf(html, {
    output: file,
    "viewport-size": "1280x1024",
    "page-width": "400",
    "page-height": "600"
});
}

其中 file 是您要保存文件的路径。

【讨论】:

  • 非常感谢@Akshay Kumar。但我还有一些问题: 1:如何声明变量“布局”并在 .js 文件中使用它? 2:如何使用.json文件中的数据进行html布局(当我更改json文件的内容时,html的内容也会自动更改)? 3:如何在我的report.pdf文件(上面有问题的帖子)中创建一个与样式完全相同的stype?我以前只用过C/C++,两天前我才用过nodejs,html所以请你回答得更详细一些,完成你的代码对我更有用。
  • 在 .js 中只需将变量声明为
  • 在 .js 中只需将变量声明为 var = "
    • Info:
      • Company: {{info.Company}}
      • 团队:{{info.Team}}
    • 成员数量:{{info.numberofmembers}}
    • 完成时间:{{info.timetofinish} }
      • ”。阅读有关解析 json 数据并将 html 构造为字符串的信息。对于点的编号,您可以使用“
      ”标签代替“
      ”标签。
  • 当我运行 .js 文件时。我没有看到日志“生成 pdf”(也没有错误日志)。这意味着它不会进入函数 generatePdf。你知道这里有什么问题吗?
【解决方案3】:

有很多解决方案说先转换为 html,然后再转换为 pdf,但可以使用“pdfmake”或“pdfkit”库直接生成 pdf。我已经使用过它及其非常好的库。 pdfkit 是制作 pdfmake 的父库。 与 pdfkit 相比,pdfmake 是一个非常简单的库(这是我的感受)。 pdfmake 缺少一些功能,例如书签和 toc(目录标题)链接到相应页面。

pdfmakehttps://pdfmake.github.io/docs/

pdfkithttp://pdfkit.org/docs/getting_started.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2019-09-13
    • 2019-12-04
    • 2018-01-14
    • 1970-01-01
    相关资源
    最近更新 更多