找回密码
 立即注册

QQ登录

只需一步,快速开始

ArnoldH

注册会员

5

主题

17

帖子

48

积分

注册会员

积分
48
ArnoldH
注册会员   /  发表于:2019-6-17 20:00  /   查看:4008  /  回复:3
本帖最后由 ArnoldH 于 2019-6-17 20:00 编辑

您好,我在单元格中通过自定义迷你图函数的方式插入了图片,并且可以正确地显示出来了。但是在打印时却显示“[object Object]"。
使用的SpreadJS的版本是12.

具体如下:
1、增加了迷你图函数:
const CellImgHAlign = { left:1, center:2, right:0 };
const CellImgVAlign = { top:1, middel:0, bottom:3 };
function CellImg() {
    GC.Spread.Sheets.Sparklines.SparklineEx.call(this);
}
CellImg.prototype = new GC.Spread.Sheets.Sparklines.SparklineEx();
CellImg.prototype.createFunction = function () {
    var func = new GC.Spread.CalcEngine.Functions.Function("CELLIMG", 1, 5);
    func.evaluate = function (args) {
      var returnVal = new Object();
      returnVal.iconImg = args[0];
      
      //hAlign
      if (args.length >= 2) {
       returnVal.hAlign = args[1];
      } else {
       returnVal.hAlign = CellImgHAlign.center;
      }
      
      //vAlign
      if (args.length >= 3) {
       returnVal.vAlign = args[2];
      } else {
       returnVal.vAlign = CellImgHAlign.middel;
      }
      
      //imgWidth
      if (args.length >= 4) {
       returnVal.imgWidth = parseInt(args[3]);
      } else {
       returnVal.imgWidth = 0;
      }
      
      //imgHeight
      if (args.length >= 5) {
       returnVal.imgHeight = parseInt(args[4]);
      } else {
       returnVal.imgHeight = 0;
      }
      
        return returnVal;
    };
    return func;
};
CellImg.prototype.paint = function (context, value, x, y, width, height) {
  if (value == null) {
   console.log("paint(): value is null.");
   return;
  }
  if (!value.iconImg) {
   console.log("paint(): value.iconImg is null.");
   return;
  }
  
    context.save();
    // draw inside the cell's boundary
    context.rect(x, y, width, height);
    context.clip();
    context.beginPath();
  
    var img = document.createElement("img");
        
    if (value.iconImg.indexOf("/") < 0) {
     var defaultImgDir = WEB_CONTEXT_PATH + "/eip/tools/seditor/img_ud/";
     img.src = defaultImgDir + value.iconImg;
    } else {
     img.src = value.iconImg;
    }
    //console.log("img.src:" + img.src);
   
    var imgWidth = value.imgWidth; if (imgWidth == 0) { imgWidth = width;}
    var imgHeight = value.imgHeight; if (imgHeight == 0) { imgHeight = height;}
   
    //console.log("value:" + value.hAlign + ":" + value.vAlign);
   
    var imgX = x + width - imgWidth;
    if (value.hAlign == CellImgHAlign.left) {
     imgX = x + 1;
    } else if (value.hAlign == CellImgHAlign.center) {
     imgX = x + (width - imgWidth) / 2;
    }
    var imgY = y;
    //console.log(img.src + ":" + imgX + ":" + imgY);
   
    try {
     context.drawImage(img, imgX, imgY, imgWidth, imgHeight);
    } catch (e) {
     console.log(e.getMessage() + ":" + img.src);
    }
   
    context.closePath();
    context.fill();
    context.restore();
};

2、在单元格公式中输入:
=CELLIMG("DNA.jpg",1)

界面上可以正确地显示插入的图片,如下图所示:
image.png954832458.png


但是在打印时,图片所在位置只显示了“[object Object]",如下图所示:
image.png240822753.png

请问这个问题该如何解决?



3 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-6-18 12:24:39
沙发
您好,这个问题涉及到一些内部的机制问题,

目前您应该也发现了,这样设置的图片在改变行高列宽时,经常有绘制不出来的现象发生,

另外,关于自定义函数迷你图的打印机制还需进行验证,

本周内,后续进展在本帖回复您。
回复 使用道具 举报
ArnoldH
注册会员   /  发表于:2019-6-18 14:27:12
板凳
是的,在点击行或列,或者滚动页面导致图片挪到屏幕之外等情况下,有可能会出现图片不显示或者只显示一部分的情况。
那我就等候您那边的研究进展,谢谢!
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-6-18 18:29:54
地板
不客气,帖子状态已经改为保留处理,有进展会在本帖回复您。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部