找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

130

主题

246

帖子

1528

积分

超级版主

Rank: 8Rank: 8

积分
1528
Winny
超级版主   /  发表于:2021-7-23 17:36  /   查看:3116  /  回复:0
本帖最后由 Joestar.Xu 于 2024-4-8 09:25 编辑

部分用户在项目中,会遇到将当前spreadjs导出成图片的需求。但spreadjs目前并没有api可以直接导出成图片,本文借助spreadjs打印,实现导出图片的功能。
具体的实现原理如下:
step1: 初始化spread;
  1. let spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'),{sheetCount:3})
复制代码
step2: 设置打印属性
  1. let sheet = spread.getSheet(0)
  2. let printInfo = sheet.printInfo() || new GC.Spread.Sheets.Print.PrintInfo()
  3. //只有打印质量大于等于4时才会生成图片
  4. printInfo.qualityFactor(5)
  5. //需要将margin清除,否则导出图片会有空白图
  6. printInfo.margin({top:0, bottom:0, left:0, right:0, header:0, footer:0});
  7. //打印时隐藏列头          printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide)
  8. // 打印时隐藏行头         printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide)
  9. //设置打印纸张,大一点导出的图片会在一张
  10. printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(GC.Spread.Sheets.Print.PaperKind.a3))
复制代码
step3: spread绑定BeforePrint事件
  1. spread.bind(GC.Spread.Sheets.Events.BeforePrint,(s,e) => {
  2.                 let iframe = e.iframe
  3.                 let imgs = iframe.contentWindow.document.getElementsByTagName("img")
  4.                 for(let i=0; i<imgs.length; i++){
  5.                     let img = imgs[i]
  6.                     let canvas = document.createElement("canvas")
  7.                     canvas.height = img.naturalHeight
  8.                     canvas.width = img.naturalWidth
  9.                     let ctx = canvas.getContext('2d')
  10.                     ctx.fillStyle = '#fff'
  11.                     ctx.fillRect(0,0,canvas.width,canvas.height)
  12.                     ctx.drawImage(img,0,0)
  13.                     canvas.toBlob((blob) => {
  14.                         saveAs(blob,'print'+i+'.jpeg')
  15.                     })
  16.                     e.cancel = true
  17.                 }
  18.             })
复制代码

通过上述三个步骤,就可以将spreadjs导出成图片啦,使用时别忘了引入打印相关的资源包~
具体Demo示例见下方链接。




index04.html

3.58 KB, 下载次数: 80

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部