传真件如何拆分、在线查看、旋转

    距离上一篇随笔过去已经太久,这一大段时间不停的做项目,多个项目中有各式各样的问题。休假归来,统一整理一下。

    今天总结的是项目中用到的一个东西,如何在系统中集成传真收发文,提供在线阅读、打印、旋转等功能。对于传真在线查看这个问题在网上还是有很多资料的,在此将拆分与查看、以及变态传真的旋转总结一下。

1、传真管理

    这个部分很简单,写一个windows服务程序,定时监视传真机收文文件夹中的tif文件,发现一个就往数据库里面写一条记录。需要读取的时候再取出来用。

2、传真的拆分

     对于传真的拆分需要用到image类,这个类平时用得较多的应该仅仅是绑定图片这样一个简单的操作,但是打开MSDN看看会吓一跳,还有这么多属性,这么多类,具体见http://msdn.microsoft.com/zh-cn/library/System.Drawing.Image_properties(v=vs.110).aspxhttp://msdn.microsoft.com/zh-cn/library/System.Drawing.Image_methods(v=vs.110).aspx。 对于这些类和方法很多不可知,但是在拆分tif文件的时候恰好需要用到。如下:

拆分tif文件关键代码:

//载入二进制流
MemoryStream ms = new MemoryStream(imgbyte);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
//获取 GUID 的数组,这些 GUID 表示此 Image 中帧的维数
Guid guid = (Guid)img.FrameDimensionsList.GetValue(0);
FrameDimension dimension = new FrameDimension(guid);
//返回指定维度的帧数。
int totalPage = img.GetFrameCount(dimension);

如上所示,已经求到了tif图片的总帧数,也就是页数。那接下来就是一页一页的取出来另存为我们常用的jpg图片了,如下所示:

//构建dt 循环拆分传真件
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("Url");
for (int i = 0; i < totalPage; i++)
{
    //选择由维度和索引指定的帧(页)。
    img.SelectActiveFrame(dimension, i);
    //开始将当前页另存到项目文件夹
if (!System.IO.File.Exists(Server.MapPath("../Files/") + fax_name + (i + 1) + ".gif"))
{ img.Save(Server.MapPath("../Files/") + fax_name + (i + 1) + ".gif", System.Drawing.Imaging.ImageFormat.Gif);//分割图片进行存储 } dt.Rows.Add(new object[] { fax_name + (i + 1), "../Files/" + fax_name + (i + 1) + ".gif" });//往dt中添加数据 urlAll += "../Files/" + fax_name + (i + 1) + ".gif" + ","; }

整个拆分过程就完毕了,目的是为了将多页tif拆分为多个连续的jgp文件,这样查看就很简单了。但是也有个问题,项目文件夹中的图片会越来越多,求高手解决此问题。

还有一些附带等会儿要用到的代码:

urlAll = urlAll.Substring(0, urlAll.Length - 1);
string[] arrUrl = urlAll.Split(',');
Count = arrUrl.Length;
for (int i = 0; i <= arrUrl.Length - 1; i++)
{
    urlFirst = arrUrl[0];
}
dt.AcceptChanges();

//构建json对象
StringBuilder data = new StringBuilder();
for (int j = 0; j < dt.Rows.Count; j++)
{
    data.Append("{id:'");
    data.Append((j + 1) + "',src:'");
    data.Append(dt.Rows[j]["Url"].ToString());
    data.Append("'},");
}
DataNew = data.ToString().Substring(0, data.ToString().Length - 1);

这部分不需要多说,就是对字符串的一系列操作,并将第一个图片作为进入页面默认显示的页面。并将图片的id、url写到json对象中,在页面查看的时候需要这个对象。

3、传真的查看

   页面准备,代码如下:

<form id="Form1" method="post" runat="server">
    <div style="background-color: #c0c0c0;" align="center">
        <div style="margin-top: 10px;">
            <img src="<%=urlFirst %>" id="imageShow" style="width: 600px; height: 800px;">
        </div>
    </div>
    <div style="width: 100%; background-color: White;" align="center">
        <input type="button" class="left" id="RotateL" >&nbsp;
        <input type="button" class="last" onclick="prov()" />&nbsp;
        <label id="now">
        </label>
        /<label id="total"></label>&nbsp;
        <input type="button" class="next" onclick="next()" />
        <input type="button" class="right" id="RotateR">
    </div>
    </form>

此处的urlFirst在上面那点里面已经阐述,默认第一页,这样的代码就可以显示我们拆分出来的图片了。

接下来就是上一页、下一页了,代码如下:

var list = [<%=DataNew %>];
    var this_id = "1";
    $(document).ready(function() {
        $("#now").html("1");
        $("#total").html(list.length);
    });
    //下一个图片
    function next() {
   
        var json = eval(list);
        for (var i = 0; i < json.length; i++) {
            if (parseInt(json[i].id) > parseInt(this_id)) {
                document.getElementById("imageShow").src = json[i].src;
                this_id = json[i].id;
                $("#now").html(this_id);
                return;
            }
        }
        alert("已经是最后一张了!");
    }
    //上一个图片
    function prov() {
        var json = eval(list);
        for (var i = json.length - 1; i >= 0; i--) {
            if (parseInt(json[i].id) < parseInt(this_id)) {
                document.getElementById("imageShow").src = json[i].src;
                this_id = json[i].id;
                $("#now").html(this_id);
                return;
            }
        }
        alert("已经是第一张了!");
    }    

这些代码大家应该能看明白,实现上下翻页的功能。在线查看,上下翻页也就是这样,接下来应该进入如何旋转图片的问题了。

4、图片旋转

     之所以会有这样的需求,还是因为在传真发送的过程中有很多小白会将纸张倒着放,斜着放,这种问题不可避免也颇为头痛。因此此功能人民群众需要他,所以我们这些人就要实现它。具体方法如下:

1)、引入jQueryRotate.2.2.js文件,这个文件可以干这个事情,这个文件网上可以搜索到。

2)、开始写翻转代码,如下:

$("#RotateR").click(function(){
                value += 90;
                $("#imageShow").rotate({ animateTo: value });
            })
            
            $("#RotateL").click(function(){
                value -= 90;
                $("#imageShow").rotate({ animateTo: value });
            })

这个翻转看着非常和谐,流畅。实乃写代码必备之良方。

整个过程描述完毕,由于项目中关联性太多,不太好释放源码,关键部分已经一一注明,应该没有问题。

预告下一篇,完美的报表如何导出到EXCEL、变态的官方公文如何在word中自动生成?

 

 

posted @ 2013-10-21 22:30  大侠酷裤马路  阅读(1127)  评论(6编辑  收藏  举报