ASP.NET 多媒体电子报刊设计(二)
在将PDF转换为一张一张图片之后,我们现在可以对每张图片进行矩形定位,也就是对每个图片里面的所有新闻进行定位。
一个矩形具有4个坐标点,我们在后期需要使用VML将其勾画出来,然后通过JS的控制,当移动到某个矩形里面的时候,才现在该矩形。因此,在这一步骤需要保存VML勾画的Point,以及X轴的最小值和最大值,还有Y轴的最小值和最大值。
HTML代码如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>编辑报刊</title>
<script language="javascript" type="text/javascript">
function ShowTechPaperDetails(val)
{
var varTechPaperName = document.getElementById("txtTechPaperName").value;
var varTechPaperDName = val;
var varTechPaperDId = document.getElementById(val).title;
document.getElementById("txtTechPaperDId").value = varTechPaperDId;
var varImageUrl = "TechheroPaper/"+varTechPaperName+"/"+varTechPaperDName;
document.getElementById("divRight").style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+varImageUrl+"',sizingMethod= 'scale')";
varRectCount = 0;
document.getElementById("divPaper").innerHTML = "";
document.getElementById("divRight").innerHTML = "";
}
var varRectCount = 0;
var Rect = {
//当前正在画的矩形对象
obj: null,
//画布
container: null,
//初始化函数
init: function(containerId){
Rect.container = document.getElementById(containerId);
if(Rect.container){
//鼠标按下时开始画
Rect.container.onmousedown = Rect.start;
}
else{
alert('不存在该区域!');
}
},
start: function(e){
//矩形计数变量
varRectCount = varRectCount + 1;
var o = Rect.obj = document.createElement('div');
o.style.position = "absolute";
//mouseBeginX,mouseBeginY是辅助变量,记录下鼠标按下时的位置
o.style.left = o.mouseBeginX = Rect.getEvent(e).x;
o.style.top = o.mouseBeginY = Rect.getEvent(e).y;
o.id = "divRect"+varRectCount;//矩形ID
o.mouseBeginOffSetX = event.offsetX;
o.mouseBeginOffSetY = event.offsetY;
o.style.height = 0;
o.style.width = 0;
o.style.border = "solid red 1px";
//向o添加一个叉叉,点击叉叉可以删除这个矩形
var deleteLink = document.createElement('a');
deleteLink.id = "del"+varRectCount;
deleteLink.href = "#";
deleteLink.style.fontSize = "20px";
deleteLink.onclick = function(){
Rect.container.removeChild(this.parentNode);
//varRectCount = varRectCount - 1;
var varDivPointId = "divPoint"+this.id.substr(3);
var varDivPoint = document.getElementById(varDivPointId);
document.getElementById("divPaper").removeChild(varDivPoint);
//this.parentNode.style.display = "none";
//alert(this.tagName);
}
deleteLink.innerText = "x";
o.appendChild(deleteLink);
//把当前画出的对象加入到画布中
Rect.container.appendChild(o);
//处理onmousemove事件
Rect.container.onmousemove = Rect.move;
//处理onmouseup事件
Rect.container.onmouseup = Rect.end;
},
move: function(e){
var o = Rect.obj;
//dx,dy是鼠标移动的距离
var dx = Rect.getEvent(e).x - o.mouseBeginX;
var dy = Rect.getEvent(e).y - o.mouseBeginY;
//如果dx,dy <0,说明鼠标朝左上角移动,需要做特别的处理
if(dx<0){
o.style.left = Rect.getEvent(e).x;
}
if(dy<0){
o.style.top = Rect.getEvent(e).y;
}
o.style.height = Math.abs(dy);
o.style.width = Math.abs(dx);
},
end: function(e){
//在新增一个矩形焦点时候同时记录起始坐标点
var o = Rect.obj;
var varDivPoint = document.createElement("<div id='divPoint"+varRectCount+"'></div>");
var varPoint = document.createElement("<input type='text' style='width:300px;' />");
var varBr = document.createElement("<br />");
var varPointX1 = document.createElement("<input type='text' />");
var varPointX2 = document.createElement("<input type='text' />");
var varPointY1 = document.createElement("<input type='text' />");
var varPointY2 = document.createElement("<input type='text' />");
var varTechPaperRName = document.createElement("<input type='text' />");
//获取divRight的top以及left
var varRightTop = document.getElementById("divRight").offsetTop;
var varRightLeft = document.getElementById("divRight").offsetLeft;
var varX = event.x - varRightLeft;
var varY = event.y - varRightTop;
varPoint.value = o.mouseBeginOffSetX+","+o.mouseBeginOffSetY+" "
+varX+","+o.mouseBeginOffSetY+" "
+varX+","+varY+" "
+o.mouseBeginOffSetX+","+varY+" "
+o.mouseBeginOffSetX+","+o.mouseBeginOffSetY;
varPointX1.value = o.mouseBeginOffSetX;//X最小值
varPointX2.value = varX;//X最大值
varPointY1.value = o.mouseBeginOffSetY;//Y最小值
varPointY2.value = varY;//Y最大值
varDivPoint.appendChild(varPoint);
varDivPoint.appendChild(varBr);
varDivPoint.appendChild(varPointX1);
varDivPoint.appendChild(varPointX2);
varDivPoint.appendChild(varPointY1);
varDivPoint.appendChild(varPointY2);
varDivPoint.appendChild(varTechPaperRName);
document.getElementById("divPaper").appendChild(varDivPoint);
//onmouseup时释放onmousemove,onmouseup事件句柄
Rect.container.onmousemove = null;
Rect.container.onmouseup = null;
Rect.obj = null;
Rect.container.onmousemove = ShowXY;
},
//辅助方法,处理IE和FF不同的事件模型
getEvent: function(e){
if (typeof e == 'undefined'){
e = window.event;
}
//alert(e.x?e.x : e.layerX);
if(typeof e.x == 'undefined'){
e.x = e.layerX;
}
if(typeof e.y == 'undefined'){
e.y = e.layerY;
}
return e;
}
};
function StartDraw()
{
Rect.init("divRight");
}
function StopDraw()
{
Rect.container.onmousedown = null;
}
function SaveDraw()
{
var varRectInfo = "";
for(var i=1;i<=varRectCount;i++)
{
var varDivPoint = document.getElementById("divPoint"+i);
if(varDivPoint == null)
{
continue;
}
for(var j=0;j<varDivPoint.childNodes.length;j++)
{
if(varDivPoint.childNodes[j].tagName != "INPUT")
{
continue;
}
if(j == 0)
{
varRectInfo = varRectInfo + varDivPoint.childNodes[j].value;
}
else
{
varRectInfo = varRectInfo + "&" + varDivPoint.childNodes[j].value;
}
}
if(i != varRectCount)
{
varRectInfo = varRectInfo + "|";
}
}
//alert(varRectInfo);
var varTechPaperDId = document.getElementById("txtTechPaperDId").value;
var varResult = FlexPaperExample.WebDemo.SavePaper.SaveTechPaperRects(varTechPaperDId,varRectInfo).value;
alert(varResult);
}
</script>
</head>
<body style="margin:0px;">
<form id="form1" runat="server">
<asp:HiddenField ID="txtTechPaperName" runat="server" />
<asp:HiddenField ID="txtTechPaperDId" runat="server" />
<div id="divLeft" style="float: left; width: 200px;">
<asp:Repeater ID="rptTechPapers" runat="server">
<ItemTemplate>
<div>
<asp:LinkButton ID="lbtnTechPaperName" ToolTip='<%# Eval("TechPaperId") %>' OnClick="lbtnTechPaperName_Click"
runat="server" Text='<%# Eval("TechPaperName") %>'>
</asp:LinkButton>
</div>
</ItemTemplate>
</asp:Repeater>
<br />
<br />
<asp:Repeater ID="rptTechPaperDetails" runat="server">
<ItemTemplate>
<div>
<a onclick="ShowTechPaperDetails(this.id);" href="#" id='<%# Eval("TechPaperDName") %>'
title='<%# Eval("TechPaperDId") %>'>
<%# Eval("TechPaperDName")%>
</a>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
<div id="divRight" onmousemove="ShowXY();" style="float: left; width: 400px; height: 550px; border: 1px solid black;">
</div>
<div>
<input id="btnStart" value="开始" type="button" onclick="StartDraw();" />
<input id="btnStop" value="停止" type="button" onclick="StopDraw();" />
<input id="btnSave" value="保存" type="button" onclick="SaveDraw();" />
<div id="divPaper">
</div>
</div>
<div>
<a href="Default.aspx">回到首页</a>
</div>
<input id="txtX" type="text" />
<input id="txtY" type="text" />
</form>
</body>
</html>
C#代码如下:
public partial class SavePaper : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(SavePaper));
if (!IsPostBack)
{
DataTable dt = SqlHelper.ExcuteDataTable("SELECT * FROM tb_TechPapers");
rptTechPapers.DataSource = dt;
rptTechPapers.DataBind();
}
}
protected void lbtnTechPaperName_Click(object sender, EventArgs e)
{
LinkButton lbtn = (LinkButton)sender;
txtTechPaperName.Value = lbtn.Text;
DataTable dt = SqlHelper.ExcuteDataTable("SELECT * FROM tb_TechPaperDetails WHERE TechPaperId = " + lbtn.ToolTip);
rptTechPaperDetails.DataSource = dt;
rptTechPaperDetails.DataBind();
}
[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]
public string SaveTechPaperRects(string strTechPaperDId, string strTechPaperRects)
{
string strSql = "";
//1.删除原有图片对应的矩形数据
strSql = "DELETE tb_TechPaperRects WHERE TechPaperDId = " + strTechPaperDId;
SqlHelper.ExecuteSql(strSql);
//2.保存每一个新的矩形信息
string[] strArrayTechPaperRects = strTechPaperRects.Split('|');
foreach (string strTechPaperRect in strArrayTechPaperRects)
{
string[] strArrayTechPaperRect = strTechPaperRect.Split('&');
TechPaperRects mTechPaperRects = new TechPaperRects();
mTechPaperRects.TechPaperRId = mTechPaperRects.GetMaxId();
mTechPaperRects.TechPaperDId = Convert.ToInt32(strTechPaperDId);
mTechPaperRects.TechPaperRPoint = strArrayTechPaperRect[0];
mTechPaperRects.TechPaperRMinX = strArrayTechPaperRect[1];
mTechPaperRects.TechPaperRMaxX = strArrayTechPaperRect[2];
mTechPaperRects.TechPaperRMinY = strArrayTechPaperRect[3];
mTechPaperRects.TechPaperRMaxY = strArrayTechPaperRect[4];
mTechPaperRects.TechPaperRName = strArrayTechPaperRect[5];
mTechPaperRects.Add();
}
return "成功!";
}
}
若有疑问或不正之处,欢迎提出指正和讨论。
浙公网安备 33010602011771号