示例说明
在项目中有时需要对报表中的图片进行局部放大预览,该功能可以通过宏实现,如下图:
...
- 在展现定制中,创建一张电子表格分析;
- 在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。
- 在报表宏界面新建客户端模块,在弹出的新建模块对话框中选择对象为spreadSheetReport;事件为onRender;并把下面宏代码复制到代码区域。
宏类型
类型 | 对象 | 事件 |
ClientSide | spreadSheetReport | onRender |
宏代码
代码块 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
var eventutil = jsloader.resolve("freequery.lang.eventutil");
function main(spreadsheetReport) {
var source = spreadsheetReport.shapesMap["图片 1"].parentNode;
var td = spreadsheetReport.getCell(3,6);
var dest = document.createElement("div");
dest.style.height="400px";
dest.style.width="400px";
dest.style.overflow ="hidden";
td.appendChild(dest);
//测试代码
Amplifier.init(source,dest,5);
}
var Amplifier = {
//图片源
source: null,
//目的地,用来显示放大的效果
dest: null,
//放大的倍数,
scale: 1,
//初始化函数 source元素里面包含img对象, dest元素是空的
init: function(source, dest,scale){
this.source = source;
this.dest = dest;
this.scale = scale||2;
//跟随鼠标移动的红色的框框
var borderBox = document.createElement("div");
borderBox.style.height = parseInt(this.source.style.height)/scale+"px";
borderBox.style.width = parseInt(this.source.style.width)/scale+"px";
borderBox.style.border = "solid red 1px";
borderBox.style.position = "relative";
this.source.appendChild(borderBox); //这个时候,放大框位于图片的下方
//将框移动到图片上
borderBox.style.top = -parseInt(this.source.style.height)+"px";
borderBox.style.left = "0px" ;
//放大后的图象
var destImg = document.createElement('img');
destImg.style.position = "relative";
destImg.src = this.source.getElementsByTagName('img')[0].src;
this.dest.appendChild(destImg);
//图像的高度和宽度倍增,我发现先要执行this.dest.appendChild(destImg);
//后再设置height,width才可以生效
destImg.height = parseInt(this.source.style.height) * scale;
destImg.width = parseInt(this.source.style.width) * scale;
//对源图片添加onmousemove事件
//this.source.onmousemove =
eventutil.addEventHandler(this.source,"mousemove",function (e){
/**
* 这里需要解释一下,ie下event.offsetX,offsetY表示鼠标相对当前事件触发元素左上角的偏移位置,
* 通过改变borderBox.style.left和borderBox.style.top来改变红色的框框在源图中的位置,而且要
* 把红色的框框限制在源图内。
**/
if (e.srcElement.nodeName != "IMG" ) //防止红框移动到鼠标位置,但是这样用起来有点卡
return;
var offsetx = Amplifier.getEvent(e).offsetX;
var offsety = Amplifier.getEvent(e).offsetY;
if(offsetx>parseInt(borderBox.style.width)/2 && (parseInt(Amplifier.source.style.width)- offsetx)>parseInt(borderBox.style.width)/2){
borderBox.style.left = offsetx - parseInt(borderBox.style.width)/2+"px";
}
else if(offsetx<parseInt(borderBox.style.width)/2){
borderBox.style.left = "0px";
}
else{
borderBox.style.left = parseInt(Amplifier.source.style.width) - parseInt(borderBox.style.width)+"px";
}
if(offsety>parseInt(borderBox.style.height)/2 && (parseInt(Amplifier.source.style.height)- offsety)>parseInt(borderBox.style.height)/2){
borderBox.style.top = -parseInt(Amplifier.source.style.height) + offsety - parseInt(borderBox.style.height)/2+"px";
}
else if(offsety<parseInt(borderBox.style.height)/2){
borderBox.style.top = -parseInt(Amplifier.source.style.height)+"px";
}
else{
borderBox.style.top = -parseInt(borderBox.style.height)+"px";
}
//改变图片的style.left,style.top就可以精确控制被放大的部分。
//就是移动放大图片的位置,使其显示应该现显示的部分
destImg.style.left = - Math.abs(parseInt(borderBox.style.left) * scale+"px");
destImg.style.top = -(parseInt(Amplifier.source.style.height) - Math.abs(parseInt(borderBox.style.top))) * scale+"px";
});
},
//辅助函数,用来修复ie和ff不同的event模型
getEvent: function(ev){
return ev;
}
}; |
...
1、问题说明
我们在安装部署tomcat的时候,经常需要修改tomcat的启动参数,很多人习惯于直接修改tomcat/bin目录下的 catalina.bat/catalina.sh 文件(或是 startup.bat/startup.sh 文件)。这种方式是不合理的,因为很多时候,我们修改的位置可能不对,造成配置的参数不生效。另外,我们修改之后,过一段时间其他人再接手维护,可能根本不知道修改了哪些地方。
为解决这个问题,我们建议使用tomcat推荐的方法,创建一个新的setenv.bat/setenv.sh文件,来配置tomcat的启动参数。请参考如下步骤。
#!/bin/sh
# catalina.sh
# -----------------------------------------------------------------------------
# Control Script for the CATALINA Server
#
# Environment Variable Prerequisites
#
# Do not set the variables in this script. Instead put them into a script
# setenv.sh in CATALINA_BASE/bin to keep your customizations separate.
#
# -----------------------------------------------------------------------------
2、设置方法
对于Windows系统和Linux系统设置方法不同,分别说明如下。
2.1 Windows系统
1、本地创建一个文本文件,另存为setenv.bat 文件,其内容如下。
代码块 | ||||
---|---|---|---|---|
| ||||
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_51"
set "JRE_HOME=C:\Program Files\Java\jdk1.8.0_51\jre"
set "CATALINA_HOME=d:\smartbi\tomcat"
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=GBK -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Xms8192m -Xmx8192m -XX:MaxPermSize=512m" |
2、把该文件setenv.bat,上传到tomcat/bin目录下即可。
2.2 Linux/Unix系统
1、本地创建一个文本文件,另存为setenv.sh 文件,其内容如下。
代码块 | ||||
---|---|---|---|---|
| ||||
export JAVA_HOME="/data/smartbi/jdk1.8.0_45"
export JRE_HOME="/data/smartbi/jdk1.8.0_45/jre"
export CATALINA_HOME="/opt/smartbi/tomcat"
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=GBK -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Xms8192m -Xmx8192m -XX:MaxPermSize=512m" |
2、把该文件setenv.sh,上传到tomcat/bin目录下。
3、上传到tomcat/bin目录下的setenv.sh文件是文本文件,赋予赋予其“执行”权限;请执行如下命令。
代码块 | ||||
---|---|---|---|---|
| ||||
chmod +x setenv.sh |