Winny 发表于 2021-7-23 17:36:32

SpreadJS导出图片

本帖最后由 Joestar.Xu 于 2024-4-8 09:25 编辑

部分用户在项目中,会遇到将当前spreadjs导出成图片的需求。但spreadjs目前并没有api可以直接导出成图片,本文借助spreadjs打印,实现导出图片的功能。
具体的实现原理如下:
step1: 初始化spread;
let spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'),{sheetCount:3})step2: 设置打印属性
let sheet = spread.getSheet(0)
let printInfo = sheet.printInfo() || new GC.Spread.Sheets.Print.PrintInfo()
//只有打印质量大于等于4时才会生成图片
printInfo.qualityFactor(5)
//需要将margin清除,否则导出图片会有空白图
printInfo.margin({top:0, bottom:0, left:0, right:0, header:0, footer:0});
//打印时隐藏列头          printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide)
// 打印时隐藏行头         printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide)
//设置打印纸张,大一点导出的图片会在一张
printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(GC.Spread.Sheets.Print.PaperKind.a3))
step3: spread绑定BeforePrint事件
spread.bind(GC.Spread.Sheets.Events.BeforePrint,(s,e) => {
                let iframe = e.iframe
                let imgs = iframe.contentWindow.document.getElementsByTagName("img")
                for(let i=0; i<imgs.length; i++){
                  let img = imgs
                  let canvas = document.createElement("canvas")
                  canvas.height = img.naturalHeight
                  canvas.width = img.naturalWidth
                  let ctx = canvas.getContext('2d')
                  ctx.fillStyle = '#fff'
                  ctx.fillRect(0,0,canvas.width,canvas.height)
                  ctx.drawImage(img,0,0)
                  canvas.toBlob((blob) => {
                        saveAs(blob,'print'+i+'.jpeg')
                  })
                  e.cancel = true
                }
            })
通过上述三个步骤,就可以将spreadjs导出成图片啦,使用时别忘了引入打印相关的资源包~
具体Demo示例见下方链接。




页: [1]
查看完整版本: SpreadJS导出图片