在BS架构中控制浏览器直接打印

是的,今天的文章标题是《在BS架构中控制浏览器直接打印》,记得之前我说过最近在做1个叫《智慧街区》的项目,里面需要攻克的第2个难点就是,客户端浏览器直接操作打印机的问题。
在BS架构中,有的时候我们需要控制浏览器直接进行打印,而不是弹出打印对话框,使用window.print()在此时就无法满足我们的需求。
我Google了1下,有多种方法,在这之前我就思考过这样1种方法:我们知道xhtml里是可以创建object对象的,比如几年前我们通过object调用Realplay、Windows Media Player播放器,这种object对象,会有2个参数叫codebase和classid,当客户端没有相关activeX插件的时候会通过codebase指定的地址进行下载,而classid是该插件在客户端注册表中的唯一对象标识。下面的代码同样可以操作打印机,这是在网上抄的,仅支持IE哦,因为IE支持ActiveX。

<OBJECT  id=WebBrowser  classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2  height=0  width=0>
</OBJECT>
<input  type=button  value="打印" onclick="document.all.WebBrowser.ExecWB(6,1)">
<input  type=button  value="直接打印"  onclick="document.all.WebBrowser.ExecWB(6,6)">
<input  type=button  value="页面设置" onclick="document.all.WebBrowser.ExecWB(8,1)">

我在实际使用中发现上面的第2个按钮“直接打印”并不起作用,依然弹出对话框。
不过我知道我的思路是正确的,肯定是需要在客户端上安装ActiveX插件,于是google出这样1个插件ScriptX,欣喜。
ScriptX官方网站:http://scriptx.meadroid.com/home.aspx
下载Resource Kit后进行解压安装,在xhtml代码中使用该对象进行操作,便支持直接打印,ScriptX的详细参数见:http://scriptx.meadroid.com/knowledge-bank/technical-reference.aspx
我这里做1些简单的示例:

<object id="factory" codebase="smsx.cab" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814">
</object>
<input  type="button"   value="直接打印"   onclick="factory.printing.print(false)">
<input type="button" value="预览" onclick="factory.printing.preview()" />

OK,本次文章到此结束,其实我不太善于写文章的。

自己写的1个简单但易懂实用的广告幻灯片切换代码

代码比较简单,可操作性较强,可以自己组合。主要使用的是jquery的自有功能实现,我把代码贴出来,有空的可以参考1下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="jquery-1.6.2.min.js"></script>

<style>
* {font-family: "Lucida Grande" , "微软雅黑" , "宋体" , "黑体" , "幼圆" , "隶书" , "华文行楷", Verdana, Lucida, Arial, Helvetica, sans-serif;}
body {
    font-size:12px;
    border:0px;
    font-variant: normal;
    color: #bcbcbc;
    text-decoration: none;
    margin: 0px;
    padding: 0px;
    background-color: #fff;
    width:100%;
}
ul,li,ol,dl,dt,dd,form{padding:0px;margin:0px;}
li{ list-style:none}
form,img { border:none;}
.left{ float:left;}
.right{ float:right}
.clear{ clear:both}
.buttons li a {width:100px;height:50px; background:#069; display:block}
.buttons li a:hover{ background:#CCC}
.buttons li a.mouseover{background:#CCC}  /* 定义鼠标移上的效果*/
</style>

<script type="text/javascript">
//焦点图功能
$(function(){
    var ad_img = $("#imgs"); //定义幻灯图片组的id,可以根据实际情况修改
    var ad_button = $("#buttons"); //定义幻灯按钮组的id,可以根据实际情况修改
    var ad_imgs = ad_img.find("li");  //图片组的li集合
    var ad_buttons = ad_button.find("li") //按钮组的li集合
    var ad_mouseoverCls="mouseover" //定义鼠标移上的class的名称,可以根据实际情况修改
    ad_imgs.hide() //默认将图片组隐藏
    ad_imgs.eq(0).show() //默认将第1张图片显示
    var ad_i = 1; //计数器,默认从第2张图片开始淡入
    ad_buttons.mouseover(function(){
        ad_i = ad_buttons.index(this); //鼠标移上的是第几个
        ad_imgs.hide()
        ieFilter(ad_imgs[ad_i]); //执行滤镜
        ad_imgs.eq(ad_i).show(); //将对应的图片显示
        ad_buttons.find("a").removeClass(ad_mouseoverCls);
        ad_buttons.eq(ad_i).find("a").addClass(ad_mouseoverCls);
        })

    //如果是ie浏览器则执行滤镜
    var ieFilter = function(o){
        if($.browser.msie){
            $(o).css("filter","progid:DXImageTransform.Microsoft.RevealTrans(Duration=1, Transition=23)") //设置滤镜
            o.filters[0].apply();
            o.filters[0].    transition=23; //每次出现不同样式
            o.filters[0].play();
            }
        }
    var ad_autoMarquee = function(){
        if(ad_i<ad_imgs.length){
            ad_imgs.hide()
            ieFilter(ad_imgs[ad_i]); //执行滤镜
            ad_imgs.eq(ad_i).show(); //将对应的图片显示
            ad_buttons.find("a").removeClass(ad_mouseoverCls);
            ad_buttons.eq(ad_i).find("a").addClass(ad_mouseoverCls);
            ad_i++; //将计数器增1
            }else{
                ad_i=0; //重置计数器
                }
        }
    var focusAd = setInterval(ad_autoMarquee,3000)
    })    
</script>
</head>

<body>
<div >
<div id="imgs">
    <ul>
    <li><img src="Chrysanthemum.jpg" /></li>
    <li><img src="Desert.jpg" /></li>
    <li><img src="Hydrangeas.jpg" /></li>
    </ul>
</div>
<div     class="right buttons" id="buttons">
    <ul>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    </ul>
</div>
</div>
<div     class="clear"></div>
<h1><a href="http://zhuoyue.me">卓越.Me</a></h1>
</body>
</html>

你也可以看1下在线演示的效果:http://demo.zhuoyue.me/js/Ad/zi-ji-bian-xie-de-jian-dan-yi-dong-de-huan-deng/
当然你可以把源代码和图片下载下来:自己编写的简单易懂实用的广告幻灯代码

回顾1些在项目管理中遇到的问题和解决方式

从事软件开发很长很长1段时间了,除去在校时光,正式进行社会工作也已经4年光景了。记得最初的时候,我还是使用ASP,那会儿asp还很流行,.net framework1.1才出来不久,那会儿是2003年吧;那会儿你要既会vbscript也要会javascript;那会儿你要既会css也要会html4;那会儿你要既懂vb.net 2003,也要懂c++;总之那会儿,我接触到了很多语言、思想之类的东西。
工作4年了,大小遇到过的项目也有三四十个了吧,由于1直以来,从踏入社会的那1刻就从事项目管理和开发的工作,所以在实践的道路上遇到过很多问题,通常是通过自己翻阅资料,以及寻求互联网帮助来解决,现在也慢慢的喜欢上这种方法。
现在把1些近期项目中遇到的问题记录如下,另外也附带了自己当时的处理方法和思路:
1.信息的不对称和不及时,这个问题是所有问题的根源。打个比方,进入某个迭代的产品测试环节,产品告诉美术根据客户需求,需要将新闻和公告互换位置,美术将更改后的效果图发送至项目经理和产品进行确认,项目经理可能还不知道这样1件事,项目经理、产品、客户确认过后,美术将效果图发送至前端,前端可能还不知所以然,问:“这是什么呀?”,然后美术又需要将修改的地方告诉前端。
这种信息的不对称和不及时,在项目的开发过程中,会浪费很多时间和工作量,我们应该使用1种网络软件管理或电邮等方式,要让所有项目组的人及时清楚,以及明确各自的责任。这个环节我目前使用的是zentao来进行管理。
Continue reading “回顾1些在项目管理中遇到的问题和解决方式”