通过node实现证书模版自动动态填充相关信息,生成不同的证书-工作记录

最近项目有一个需求是生成每个学员的培训证书,每个学员的信息不同,要动态生成证书

1.首先找UI老师要一张证书模版图,svg格式的,我从网上扒了一张

cert.png

2.到 https://c.runoob.com/more/svgeditor/ 的svg 编辑器上 把 空着的 四个空位填上变量

  • 导入svg

image.png

  • 左侧栏的文本编译器,在空位上填充上变量名称(名称尽量起的特殊、唯一,不容易重复的)

image.png

  • 依次填充完,我先设置不同的颜色用于区分

image.png

3.通过nest框架简单写一个接口,作为示例(具体代码仓库地址我放到后面)

import { Controller, Get, Query, ValidationPipe } from '@nestjs/common';
import { FileReadService } from './file-read.service';
import * as fs from 'fs';

@Controller('api')
export class FileReadController {
  constructor(private readonly fileReadService: FileReadService) {}
  @Get('/fileRead')
  async getFileRead(): Promise<any> {
    try {
      //转换svg为utf-8格式
      let svgContent = await fs.promises.readFile(
        'src/assets/images/cert.svg',
        'utf-8',
      );
      //替换空位的变量的值,这些值正常是根据前端传参查出指定的用户信息赋值替换上去的
      svgContent = svgContent.replace(/namenamename/gi, '张三');
      svgContent = svgContent.replace(/IDIDIDIDIDIDIDIDI/gi, '1234567789090');
      svgContent = svgContent.replace(/certCERTCERTCERT/gi, '1234567890123');
      svgContent = svgContent.replace(/timeTIMTIMTIMTI/gi, '2023-08-29');
      return svgContent;
    } catch (error) {
      return error;
    }
  }
}
  1. 前端调用接口返回 svg 的数据 (看到返回的数据已经是替换成功了)

image.png

5.前端同学回显证书 - 以小程序的写法做demo

wx.request({
    url: `127.0.0.1:3000/api/fileRead`,
    success:(res)=>{
      let data = res.data;
      let iconPath = 'data:image/svg+xml;base64,' + Base64.btoa(unescape(encodeURIComponent(data))); 
      this.setData({  
        cert_url:iconPath
      })
    }
})

//cert_url 生成一个 图片的 url,用 image 标签展示
<image wx:if="{{cert_url}}" src="{{cert_url}}" class="tag"></image>

6.证书最后样式

image.png

nest模版代码仓库地址https://gitee.com/kangshuolei/nest-demo

感觉有帮助,麻烦给个 start !

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值