基于nodejs在服务端生成echarts图片方案

一、场景需求

项目中需要为用户生成分析报告,报告的内容是由多个图表和文本描述组成的word/pdf文档。这需要在服务端生成echarts图片,然后将图片插入到报告中。

二、实现思路

搭建一个web服务,基于ejs动态渲染出包含echarts配置信息的html页面,使用headless浏览器渲染html页面,然后对echarts图表进行截图,返回echarts图表的base64编码。

image.png

 

三、实现步骤

第一步:使用express搭建一个web服务器。

const express = require("express"); 
const path = require("path")
const app = express(); 
const renderCharts = require('./controller/charts')
//配置静态路径 
app.use(express.static(path.join(__dirname, "./resource"))) app.use(express.static(path.join(__dirname, "./dist/html"))) 
//解析json格式的请求体 
app.use(express.json())
//将ejs设置为默认的模板引擎 
app.set("view engine", "ejs") 
//设置模板路径 
app.set("views", path.resolve(__dirname, "views")) 
//配置路由 
app.post("/echarts", renderCharts) 
//启动服务 
app.listen(3000, () =>{   
  console.log("服务器已经启动!请访问:http://localhost:3000") 
})

第二步:使用ejs引擎,动态渲染包含echarts配置信息的html页面。

//html模板字符串
const layoutHtmlStr = `
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"></head>
<body>
    <div id="container" style="height: 400px; width: 500;"></div>
    <script src="https://cdn.staticfile.org/echarts/4.7.0/echarts.min.js"></script>
    <script type="text/javascript">
        echarts.init(document.getElementById('container')).setOption(<%- chartConfigStr %>);
    </script>
</body>
</html>
`
function renderCharts(req, res, next){
  //获得请求参数
  var chartConfig = req.body.chartConfig;  
  //将模板字符串和echarts配置项作为参数传递给 EJS,渲染出html文件
  let chartHtmlStr = ejs.render(layoutHtmlStr, {chartConfigStr:JSON.stringify(chartConfig)})
  let chartHtmlPath = path.join('http://localhost:3000/0.html');
  fs.writeFile(chartHtmlPath, chartHtmlStr, (err)=>{
    if(err){
      return next(err)
    }
    htmlToBase64Img().then((base64img) => {
      res.send(base64img)
      fs.unlink(chartHtmlPath, ()=>{});
    })
  })
}

第三步:使用无界面浏览器phantomJS打开html文件,渲染echarts图表并截图,返回图片的base64编码。

async function htmlToBase64Img() {
  try{
    var phInstance = await phantom.create();
    var sitepage = await phInstance.createPage();
    await sitepage.open(`http://localhost:3000/0.html`);
    var base64img = await sitepage.renderBase64(('PNG'))
    sitepage.close();
    phInstance.exit();
    return base64img;
  }catch(error){
    throw new Error(error)
  }
}

四、效果展示

下面是一个echarts图表在线调试页面,将生成echarts图表的配置信息输入在左侧文本框中,点击生成图片按钮调用接口,将echarts图表的base64编码展示在右侧图表预览区。

动画.gif

 

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Node.js的代码生成器是一种工具,它可以根据预定义的模板和规则自动生成代码。这些生成器通常用于加快开发过程,减少重复性工作,并提高代码的一致性和可维护性。 Node.js作为一个强大的后端开发框架,拥有丰富的生态系统和大量的第三方库,使得基于Node.js的代码生成器具有很高的灵活性和可扩展性。下面是一些常见的基于Node.js的代码生成器: 1. Yeoman:Yeoman是一个流行的代码生成器,它提供了一个可扩展的脚手架工具,可以帮助开发者快速创建项目结构、生成模块、配置文件等。Yeoman支持大量的生成器插件,可以满足各种不同的项目需求。 2. NestJS CLI:NestJS是一个基于Node.js的框架,用于构建高效、可扩展的服务器端应用程序。NestJS CLI是官方提供的命令行工具,可以通过简单的命令来生成控制器、服务、模块等代码文件,加速项目开发。 3. Express Generator:Express是一个流行的Node.js Web应用框架,而Express Generator是官方提供的脚手架工具,可以快速生成Express项目的基本结构和文件。通过Express Generator,开发者可以快速创建路由、中间件、视图等代码文件。 4. Sequelize CLI:Sequelize是一个强大的Node.js ORM(对象关系映射)库,用于操作数据库。Sequelize CLI是Sequelize官方提供的命令行工具,可以生成模型、迁移文件等数据库相关的代码,简化数据库操作的开发过程。 这些基于Node.js的代码生成器都提供了丰富的命令和选项,可以根据开发者的需求进行定制和扩展。通过使用这些工具,开发者可以快速生成符合规范的代码,提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值