| 问题原因:
印章盖章参照锚点为文本正文时候,印章位置通常不会发生偏移。如果出现表格跨度跨页导致页面上没有文本正文时,印章锚点落在表格内,(0,0)盖章坐标即为印章坐标锚点。参考下图:

解决方法:选中图片/印章后,可获取 图片/印章 实际锚点坐标。实际应插入图片或者加盖印章的坐标,按照锚点坐标系重新计算定位即可。
参考代码及注释如下:
function MoveSign()
{
/*
本调整代码仅适用于表格中印章偏移的调整【不适于无表格页签章调整】。
实测wps环境下,排版空格会造成轻度横向误差
*/
obj = document.getElementById("TANGER_OCX");
var mydoc = obj.ActiveDocument;
var nShapes = mydoc.Shapes;
var App = mydoc.Application;
var Sel = App.Selection;
var AbsCorX = parseInt(Sel.Range.Information(5));//当光标X坐标,非必要赋值
var AbsCorY = parseInt(Sel.Range.Information(6));//非必要赋值
//alert("AbsCorX = " + AbsCorX + "AbsCorY = " + AbsCorY);
//return;
for(var i=nShapes.Count;i>=1 ;i--)
{
var curShape = nShapes(i);
if(12 == curShape.TYPE)
{
var oleType = curShape.OLEFormat.ClassType.toUpperCase();
if(("NTKO.SECSIGNCONTROL".toUpperCase() == oleType) || ("NTKO.SECSIGNSVRCTRL".toUpperCase() == oleType)) //NTKO印章控件
{
nShapes(i).Select();//选中印章、图片对象,选中图片才能获取该图片锚点
Sel.ShapeRange.RelativeVerticalPosition = 1;
Sel.ShapeRange.RelativeHorizontalPosition = 1;
AbsCorX = parseInt(Sel.Range.Information(5));//印章、图片当前页绝对参照坐标原点X坐标
AbsCorY = parseInt(Sel.Range.Information(6));//印章、图片当前页绝对参照坐标原点Y坐标
curShape.Left = parseInt(document.getElementById("CorX").value) - AbsCorX;//修正X坐标,需要开发者替换为实际加盖印章位置坐标。
curShape.Top = parseInt(document.getElementById("CorY").value) - AbsCorY;//修正Y坐标。
break; //找到最后一个印章处理完毕后直接跳出循环,防止对其他印章造成影响
}
}
}
}
|