‘编程学习’ 分类下的所有文章
20108 月3

DIV+CSS常用属性定义说明

.toptab {
    min-width:60px;/*最小宽度*/
    _width:60px; /*实现min-width兼容 IE6*/
    overflow: hidden;/*不出现滚动条*/
    float:left;/*左浮动*/
    padding:2px 6px 0 6px;/*定义元素内边框,上右下左*/
    margin:0 10px 0 0;/*定义元素外边框,上右下左*/
    text-align:center;/*文本居中对齐*/
    height:22px;
    line-height:22px; /*两个高度一致,使文本上下垂直居中 */
    font-size: 12px;/*文字大小*/
    background-color:#ffffff;/*元素背景颜色*/
    color: #333333;/*文字颜色*/
    font-weight: normal;
    text-decoration: none;/*不出现下划线*/
}

ps:内联(display:inline;)属于行布局,其特性是在一行里进行布局,不能设置宽高

20108 月1

JS 实现DIV随浏览器窗口大小变化

以下是宽度变化的示例,高度也可参考:

<script type="text/javascript">
    function initWidth() {
        var bodyWidth = document.compatMode == "BackCompat"?document.body.clientWidth:document.documentElement.clientWidth;
        document.getElementById("Content").style.width = bodyWidth - 180;
    }
    initWidth();
    if (document.attachEvent) {
        window.attachEvent('onresize', initWidth);
    } else {
        window.addEventListener('resize', initWidth, false);
    }
</script>
20107 月31

本站顺利升级至 WordPress 3.0.1 简体中文版(下载)

安装完3.0.1英文原版之后,使用3.0简体中文语言包替换对应文件即可。

  • WordPress 3.0.1 英文原版:zip下载
  • WordPress 3.0 简体中文语言包:zip下载
  • ..

    20107 月29

    buffalo ajax 实现表单提交

    前台代码

    <html>
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gbk">
        <title>test</title>
        <LINK href="/wi/css/oa/blue/menu.css" type=text/css media=screen rel=stylesheet>
        <script language="javascript" src="/wi/script/prototype.js"></script>
        <script language="javascript" src="/wi/script/buffalo.js"></script>
    
    </head>
    <script language="javascript">
        var endPointTop = '/wi/buffalo';
        var waitingImg = '/wi/images/oa/loading.gif';
        var loadingImg = '/wi/images/oa/loading.gif';
        var userId = 'superadmin';
        var deptId = '0001';
        function test() {
            try {
                var user = Buffalo.Form.formToBean("form1", "modules.sys.Sys_user", true);
    
                var buffalo = new Buffalo(endPointTop);
                buffalo.remoteCall("desktopService.test", [userId,user], function(reply) {
                    var str = reply.getResult();
                    alert(str);
                });
            } catch (ex) {
               //   alert(ex);
            }
        }
    </script>
    <body style="margin: 0; padding: 0; overflow: auto; " marginwidth="0" topmargin="0" leftmargin="0" marginheight="0">
    <a href="#" onclick="test();">test</a>
    
    <form id ="form1">
    
      <p>id:<input name="id" type="text" id="id">
    
      name:<input name="name" type="text" id="name">
    
      age: <input name="age" type="text" id="age">
    
     memo: <input name="memo" type="text" id="memo">
    
      </p>
    
    </form>
    
    </body>
    </html>

    后台bean

    public class User {
    
        private int id;
    
        private String name;
    
        private int age;
    
        private String memo;
    
        public User() {
    
        }
        //结合数据库操作可以添加 rs.getString 、get、set 方法
    }

    执行类

    public class desktopService {
        public int test(String userId, Sys_user obj) {
    
            return 1;
        }
    }

    buffalo缺点

    实测过程中发现,buffalo实现form表单元素绑定是一对一的,form里包含多余的元素会报错。

    20107 月27

    buffalo+list+ul+li 实现Ajax多级菜单

    Buffalo ajax使用说明

    源代码

    <html>
    
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gbk">
    <title>LeftMenu</title>
    <LINK href="css/menu.css" type=text/css  media=screen rel=stylesheet>
    <script language="javascript" src="script/prototype.js"></script>
    <script language="javascript" src="script/buffalo.js"></script>
    </head>
    <script language="javascript">
        var endPointTop = '/${globals_sys_basename}/buffalo';//globals_sys_basename应用根目录
        var waitingImg = '/${globals_sys_basename}/images/oa/loading.gif';
        var loadingImg = '/${globals_sys_basename}/images/oa/loading.gif';
        var userId = '$!{user.getLoginname()}';
        var deptId = '$!{user.getUnitid()}';
        var alreadyOpenTableId = null;
        var hrefBaseValue = null;
         //HTTP://WWW.WIZZER.CN
         function getUl(e) {
            for (var i = 0; i < e.childNodes.length; i ++) {
                if (e.childNodes[i].nodeName.toUpperCase() == "UL")return true;
            }
            return false;
        }
        function subMenu(e, menuId) {//动态增加下级菜单
            if (getUl(e))return;
            try {
                var buffalo = new Buffalo(endPointTop);
                buffalo.remoteCall("desktopService.getSubMenu", [userId,menuId], function(reply) {
                //desktopService.getSubMenu ajax调用后台方法,传递用户名、一级栏目ID
                    var str = reply.getResult();//返回ArrayList对象或List对象
                    if (str.length>0) {
                        var ulElem = document.createElement("ul");
    
                        var temp = "";
                        ulElem.className = "MenuLevel2";
                        ulElem.ID = "MENU_" + menuId + "S";
                        ulElem.style.display = "";
                        for (var i = 0; i < str.length; i++) {
                            temp += "<li id='MENU_"+str[i].id+"' class='level2' onclick=\"subMenu(this,'" + str[i].id + "');menuClick(this);\" ><div>";
                            if (str[i].ext3 != null && str[i].ext3 != "") {
                                temp += "<img src='/$!globals_sys_basename/private/Icons/" + str[i].ext3 + "'>";//小图标
                            }
                            temp += "" + str[i].name + "</div></li>";
                        }
                        ulElem.innerHTML = temp;
                        e.appendChild(ulElem);
                    }
                });
            } catch (ex) {
            }
    
        }
    
        function closeMenu() {
            if (alreadyOpenTableId == null) return;
            alreadyOpenTable = document.all(alreadyOpenTableId);
            if (alreadyOpenTable.childNodes.length > 1){
                targetTable = alreadyOpenTable.childNodes[1];
            }else{return;}
            targetTable.style.display = "none";
            alreadyOpenTableId = null;
        }
        function menuClick(e) {
            var currentTableSrc = e;
            if (currentTableSrc.id != alreadyOpenTableId && currentTableSrc.id!=alreadyOpenTableId+"0001") closeMenu();
    
            targetTableId = currentTableSrc.id + "S";
            if (e.childNodes.length > 1){
                targetTable = e.childNodes[1];
            }else{targetTable=null;}
            if (targetTable == null)return;
            if (targetTable.style.display == "none") {
                targetTable.style.display = '';
                alreadyOpenTableId = currentTableSrc.id;
            } else {
                targetTable.style.display = "none";
            }
        }
     </script>
    <body style="margin: 0; padding: 0; overflow: auto; " marginwidth="0" topmargin="0" leftmargin="0" marginheight="0">
    
        <ul id=MenuUl>
    
          #foreach($obj in $list)//使用模板语言循环出第一级菜单
    
        <li  id="MENU_$!{obj.getId()}" onclick="subMenu(this,'$!{obj.getId()}');menuClick(this);"><div>#if(${obj.getExt3()})<img src="/$!globals_sys_basename/private/Icons/$!{obj.ext3}">#end $!{obj.getName()}</div>
    
        </li>
    
        #end
            </ul>
    
    </body>
    </html>

    menu.css样式表 

    body {
    	background: #d8edfc;
    	font-size: 12px;
    	font-family: 宋体;
    	scrollbar-base-color: #dbecf8;
    	scrollbar-arrow-color: #2a8ed1;
    	scrollbar-track-color: #bdddf2;
    	scrollbar-3dlight-color: #2886c5;
    	scrollbar-darkshadow-color: #2886c5;
    	scrollbar-face-color: #dbecf8;
    	scrollbar-shadow-color: #dbecf8;
    	margin: 1px;
    	border: 3px solid #4891c6;
    }
    
    
    #MenuUl {
    	list-style:none;
    	margin: 0px;
    	padding: 0px;
    	background: #d8ebf7;
    }
    
    ul.MenuLevel2 {
    	list-style:none;
    	margin: 0px;
    	padding: 0px;
    	background: #d8ebf7;
    }
    
    .level1 {
    	font-weight: bold;
    	color: #005790;
    	padding-bottom: 1px;
    
    }
    
    .level2 {
    	font-weight: normal;
    	color: #005790;
    }
    
    .level3Head {
    	font-weight: normal;
    	color: #2479b6;
    	width: 100%;
    	height: 21px;
    	padding-left: 61px;
    	padding-top: 4px;
    	background: url(images/menu_bg_head.gif) no-repeat;
    	cursor: hand;
    }
    
    .level33 {
    	font-weight: normal;
    	color: #2479b6;
    	width: 100%;
    	height: 21px;
    	padding-left: 61px;
    	padding-top: 4px;
    	background: url(images/menu_bg_3.gif) no-repeat;
    	cursor: hand;
    }
    
    .level32 {
    	font-weight: normal;
    	color: #2479b6;
    	width: 100%;
    	height: 21px;
    	padding-left: 61px;
    	padding-top: 4px;
    	background: url(images/menu_bg_2.gif) no-repeat;
    	cursor: hand;
    }
    
    .level1Style {
        /*font-size:18px;  */
    	width: 155px;
    	height: 24px;
    	background: url(images/menu_btn_bg.gif) no-repeat;
    	padding-left: 20px;
    	padding-top: 4px;
    	cursor: hand;
    }
    
    .level1SelectedStyle {
    	width: 155px;
    	height: 24px;
    	background: url(images/menu_btn_bg_selected.gif) no-repeat;
    	padding-left: 20px;
    	padding-top: 4px;
    	cursor: hand;
    }
    
    .level2Style {
    	width: 100%;
    	height: 20px;
    	background: #8ec4e9;
    	padding-left: 30px;
    	padding-top: 4px;
    	border-top: 1px solid #eff6fb;
    	cursor: hand;
    }
    20107 月24

    完美支持中文wp-cumulus标签云插件源码(无锯齿无抖动7K大小)

    1、首先安装wp-cumulus 标签Tag Cloud插件

    这个不用教了吧?:)啰嗦一下:

    参数:

    wp_tag_cloud parameters:smallest=8&largest=22&number=45

    设置最小字体、最大字体、总数量

    应用:

    若网站主题不能自动支持,可以手动编辑php文件,加入 <?php wp_cumulus_insert(); ?> 代码。

    2、使用说明

    鼠标右击下面链接,选择“另存为”(仅7K大小,效果见本站首页右下):

    /wp-content/plugins/wp-cumulus/tagcloud.swf

    上传替换网站 /wp-content/plugins/wp-cumulus/ 下tagcloud.swf文件,即可完美支持中文。

    ——以下是开发者阅读,普通用户可以略过————————————————————

    3、修改wp-cumulus源代码

    安装Adobe Flash CS4 后打开wp-cumulus源文件,按照上图步骤,选择“tag”文本框,不嵌入字符。

    4、修改Tag.as

    打开  C:\wp-cumulus\flash sources\com\roytanck\wpcumulus\Tag.as

    源代码:

    package com.roytanck.wpcumulus
    {
    
    	import flash.geom.ColorTransform;
    	import flash.filters.*;
    	import flash.display.*;
            import flash.events.*;
            import flash.net.*;
            import flash.text.*;
    	public class Tag extends Sprite {
    
    		private var _back:Sprite;
    		private var _node:XML;
    		private var _cx:Number;
    		private var _cy:Number;
    		private var _cz:Number;
    		private var _color:Number;
    		private var _hicolor:Number;
    		private var _active:Boolean;
    		private var _tf:TextField;
    
    		public function Tag( node:XML, color:Number, hicolor:Number ){
    			            _node = node;
                _color = color;
                _hicolor = hicolor;
                _active = false;
                _tf = new TextField();
                _tf.autoSize = TextFieldAutoSize.LEFT;
                _tf.selectable = false;
                _tf.antiAliasType = AntiAliasType.ADVANCED;
    	    var format:TextFormat = new TextFormat();
                format.font = "微软雅黑, Arial, 黑体";//设置字体
                format.bold = true;
                format.color = color;
                format.size = 16 * getNumberFromString(node["@style"]);
                _tf.defaultTextFormat = format;
    	    //_tf.embedFonts = true;  //是否使用字符库,这个肯定要注释掉
                _tf.text = node;
                var _loc_5:BlurFilter = new BlurFilter(5, 5, 1);
                _tf.filters = [_loc_5];
    	    var _loc_6:Bitmap = new Bitmap(null, "auto", true);
                var _loc_7:BitmapData = new BitmapData(_tf.width, _tf.height, true, color);
    
                _loc_7.draw(_tf);
                _loc_6.bitmapData = _loc_7;
                _loc_6.scaleY = 0.15;
                _loc_6.scaleX = 0.15;
    
                addChild(_loc_6);
                _loc_6.x = (-this.width) / 2;
                _loc_6.y = (-this.height) / 2;
                _back = new Sprite();
                _back.graphics.beginFill(_hicolor, 0);
                _back.graphics.lineStyle(0.6, _hicolor);
                _back.graphics.drawRect(0, 0, _loc_6.width, _loc_6.height);
                _back.graphics.endFill();
                addChildAt(_back, 0);
                _back.x = (-_loc_6.width) / 2;
                _back.y = (-_loc_6.height) / 2;
                _back.visible = false;
    			if( _node["@href"].substr(0,4).toLowerCase() == "http" ){
    				this.mouseChildren = false;
    				this.buttonMode = true;
    				this.useHandCursor = true;
    				this.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
    				this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
    				this.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
    			}
    		}
    
    		private function mouseOverHandler( e:MouseEvent ):void {
    			_back.visible = true;
    			_tf.textColor = _hicolor;
    			_active = true;
    		}
    
    		private function mouseOutHandler( e:MouseEvent ):void {
    			_back.visible = false;
    			_tf.textColor = _color;
    			_active = false;
    		}
    
    		private function mouseUpHandler( e:MouseEvent ):void {
    			var request:URLRequest = new URLRequest( _node["@href"] );
    			var target:String = _node["@target"] == undefined ? "_self" : _node["@target"];
    			navigateToURL( request, target );
    		}
    
    		private function getNumberFromString( s:String ):Number {
    			return( Number( s.match( /(\d|\.|\,)/g ).join("").split(",").join(".") ) );
    		}
    
    		public function set cx( n:Number ){ _cx = n }
    		public function get cx():Number { return _cx; }
    		public function set cy( n:Number ){ _cy = n }
    		public function get cy():Number { return _cy; }
    		public function set cz( n:Number ){ _cz = n }
    		public function get cz():Number { return _cz; }
    		public function get active():Boolean { return _active; }
    
    	}
    
    }

    5、源代码下载

    由于本空间不支持rar文件,所以有兴趣的可以到我的CSDN地址下载:

    http://download.csdn.net/source/2571076

    6、说明

    花了一天的时间,查找了许多资料,先是官方的不支持中文,后来找到方法支持中文但是有抖动的现象,效果不好,再后来找到无抖动的swf文件,但是不开源,于是自己琢磨。。

    请保留本站链接,咱都不收费而且开源了,是吧?。。呵呵

    把一些注释、空格、再优化下代码,swf文件还可以压缩,这个需要你自己尝试了。。。

    20107 月22

    在移植不同JS框架遇到报错的问题

    一般是 $ 函数冲突造成的,例如:

    function $() {
      var results = [], element;
      for (var i = 0; i < arguments.length; i++) {
        element = arguments[i];
        if (typeof element == 'string')
          element = document.getElementById(element);
        results.push(Element.extend(element));
      }
      return results.reduce();
    }

     和

    var $ = function (id) {
    	return "string" == typeof id ? document.getElementById(id) : id;
    };

    function $(ele) {
      if (typeof(ele) == 'string'){
        ele = document.getElementById(ele)
        if(!ele){
      		return null;
        }
      }
      if(ele){
      	Core.attachMethod(ele);
    	}
      return ele;
    }

    等。。。。找出问题费了一定功夫。。:(

    20107 月20

    分享本站WordPress插件(代码高亮插件等)

    为了方便大家阅读本站分享的代码,特安装了代码高亮显示插件。

    1、Auto SyntaxHighlighter

    用于可视化编辑时插入代码

    2、Syntax Highlighter and Code Prettifier Plugin for WordPress

    用于页面显示。

    ——————————————————————————–

    另外分享本站 安装的Wordpress插件经验。对一般的站点应该比较全,够用了吧?:)

    1、Akismet     防止垃圾评论的插件,需要到官网注册key

    2、Auto SyntaxHighlighter    代码高亮–可视化编辑插件(后台)

    3、Syntax Highlighter and Code Prettifier Plugin for WordPress   代码高亮显示插件(前台)

    4、NO Revisions  禁止Wordpress版本控制功能,实现文章编号的连续,节省KEY资源

    5、Some Chinese Please!   评论必须包含中文插件

    6、Watermark RELOADED   上传图片自动加水印插件

    7、WP-Mail-SMTP   使用免费邮箱作为网站邮件服务器插件,教程:/?p=297

     8、Auto_Save_Image   自动保存远程图片插件,并可设置去掉图片链接,自动添加水印

    9、WP-PostViews   文章阅读统计插件(前台)

    10、PostViews for Admin  后台显示文章统计数(后台)

    11、WP-cumulus  非常炫的3D标签云插件,完美支持中文:/?p=482

    12、其他:分享插件、防评论中的链接被百度搜集插件等。

    20107 月19

    WordPress 上传图片功能异常,导致上传没反应

    WordPress 2.9.2 版本~安装了不知道啥插件,上传图片功能异常,导致上传没反应。

    可能是Super Image Plugin Tools版本太低造成的?

    替换一些原文件还是不能正常使用,于是升级到了Wordpress 3.0~ 搞定。

    简体中文版下载地址:http://wfans.org/blog/2010/06/wordpress-3-0-chinese-version-released/

    另外还安装了 Watermark RELOADED 水印插件,没出问题。

    20107 月19

    WordPress 如何设置QQ域名邮箱–空间禁止mail()

    测试了下站点的注册功能,发现邮件发送不了。提示空间禁止 mail() 函数~~:(

    多方查找,终于找到解决办法,现分享如下:

    1、首先开通QQ的域名邮箱功能,把域名和QQ邮箱进行绑定。

    详情访问:http://domain.mail.qq.com/cgi-bin/loginpage

    2、安装wordpress插件:WP-Mail-SMTP

    在网站后台插件里搜索Mail会找到,进行在线安装。安装完毕点setting进入设置。

    3、WP-Mail-SMTP设置如下:

    update options  搞定。

    4、Send a test Mail

    20107 月16

    JS:cookies 存、取、删除实例

    function SetCookie(name,value)
    {
    var Days = 1;
    var exp = new Date();
    exp.setTime(exp.getTime() + Days*24*60*60*1000);
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    }
    function getCookie(name)//取cookies函数
    {
    var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
    if(arr != null) return unescape(arr[2]); return null;
    
    }
    function delCookie(name)//删除cookie
    {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval=getCookie(name);
    if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
    }
    
    20107 月14

    Buffalo ajax实例

    Buffalo是国人开发的Ajax框架,它可以使用户在js中方便的调用java代码里的方法。

    后台配置方法:

    1. web.xml中配置相关servlet 如下:

    <!–buffalo ajax–>
        <servlet>
            <servlet-name>buffalo</servlet-name>
            <servlet-class>net.buffalo.web.servlet.ApplicationServlet</servlet-class>
        </servlet>

        <servlet-mapping>
            <servlet-name>buffalo</servlet-name>
            <url-pattern>/buffalo/*</url-pattern>
        </servlet-mapping>

    2. 需要引入的jar包为:

    加入两个jar包:buffalo-2.0.jar和commons-logging-api-1.0.4.jar(下载包里有,下载地址见文章最后)。

    注:若commons-logging-api-1.0.4.jar不加入,会抛出异常。

    3. 编写需要调用的业务类。
    如:
    1. desktopService.java

    package oa.ajax;
    
    /**
     * Created by IntelliJ IDEA.
     * User: wizzer
     * Date: 2010-7-15
     * Time: 16:08:22
     * To change this template use File | Settings | File Templates.
     */
    public class desktopService {
            public String getInfoCount(String userId,String depId){
    
                 return "0|1|2";
            }
    }
    
    

    4. 配置文件中配置业务类

     配置文件为:buffalo-service.properties  位置在classes下
     
     内容如下:
     
    desktopService=oa.ajax.desktopService
     
     多个类则配置多个: 格式 名称=业务类全名
     
     注意:js里则通过  desktopService来代替oa.ajax.desktopService类执行其中的业务方法
     
     到此后台代码结束

    下面为前台调用

    5. 在jsp中引入js文件:prototype.js 和 buffalo.js 文件

     <script type=”text/javascript” src=”js/prototype.js”></script>
     <script type=”text/javascript” src=”js/buffalo.js”></script>
     
    6. 编写调用js代码

    注意:helloService这个是配置文件中配置的名称

    <script type="text/javascript">  
          var endPoint = "<%=request.getContextPath()%>/buffalo"; 
          var buffalo = new Buffalo(endPoint);   
          var userId= "wizzer";
          var deptId = "HITS";
    
    function getEventCount() {
     try {
      var buffalo = new Buffalo(endPointTop);
    
             buffalo.remoteCall("desktopService.getInfoCount", [userId, deptId], function(reply) {
    
                    var str = reply.getResult();
                 var ary = str.split("|");
    
        document.getElementById("msg").innerHTML = "(" + ary[0] + ")";
        document.getElementById("mail").innerHTML = "(" + ary[1] + ")";
        document.getElementById("wait").innerHTML = "(" + ary[2] + ")";
             });
     } catch (ex) {
     }
    }
    
    </script>   
    
    

        
        <input type=”button” value=”Buffalo远程调用” onclick=”getEventCount();”/>
       
        消息<div id=”msg”></div>
     信箱<div id=”mail”></div>
     待办<div id=”wait”></div>
       
       
    Buffalo ajax 最新版下载地址:http://buffalo.sourceforge.net/download.html

    20107 月9

    CSS+DIV+UL+LI 实现简单下拉菜单

    <!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=gb2312" />
    <title>wizzer.cn</title>
    <style type="text/css">
    <!--
    * {
    margin:0px;
    padding:0px;
    font-family:"宋体";
    font-size:12px;
    text-align:center;
    }
    body ul{
    margin:0px auto;
    }
    #mean{
    width:500px;
    margin:0px auto;
    padding:0px;
    }
    #mean li{
    float:left;
    list-style-type:none;
    width:80px;
    padding:1px;
    line-height:25px;
    }
    .a{
        background-color: #9DDFAA;
        color: #060;
        text-decoration: none;
        border: 1px solid #0C6;
        display: block;
    
    }
    .a:hover{
        color: #FFFFFF;
        background-color: #12581A;
        border: 1px solid #6AFF6A;
    }
    .list{
        width: 80px;
    
    }
    .list ul{
    margin:0px auto;
    padding:0px;
    }
    .list li{
        float: left;
        height: 18px;
        width: 80px;
    }
    .b{
        width: 80px;
        background-color: #55BF60;
        line-height:18px;
        display: block;
        text-decoration: none;
        color: #000;
        filter:Alpha(opacity=70);
    }
    .b:hover{
        background-color: #FFFFFF;
        color: #060;
        text-decoration: none;
        filter:Alpha(opacity=70);
    }
    .menu2{
        height: 26px;
        width: 80px;
        cursor:hand;
        overflow-y:hidden;
    }
    #keai{
        width:800px;
        height:50px;
        background-color:#4033D7;
        z-index:-1;
        position: absolute;
        left: 0px;
        top: 35px;
    }
    -->
    </style>
    </head>
    <body>
    <div id="mean">
    <ul>
    <li onMouseOver="this.className='menu1'"
    onMouseOut="this.className='menu2'">
    <a href="#">网站首页</a>
    <div>
    <ul>
    <li><a href="#">我的主页</a></li>
    <li><a href="#">我的空间</a></li>
    <li><a href="#">我的相册</a></li>
    <li><a href="#">我的日志</a></li>
    </ul>
    </div>
    </li >
    <li onMouseOver="this.className='menu1'"
    onMouseOut="this.className='menu2'"><a href="#">新闻公告</a>
    <div>
    <ul>
    <li><a href="#">我的主页</a></li>
    <li><a href="#">我的空间</a></li>
    <li><a href="#">我的相册</a></li>
    <li><a href="#">我的日志</a></li>
    </ul>
    </div>
    </li>
    <li onMouseOver="this.className='menu1'"
    onMouseOut="this.className='menu2'"><a href="#">产品信息</a>
    <div>
    <ul>
    <li><a href="#">我的主页</a></li>
    <li><a href="#">我的空间</a></li>
    <li><a href="#">我的相册</a></li>
    <li><a href="#">我的日志</a></li>
    </ul>
    </div>
    </li>
    <li onMouseOver="this.className='menu1'"
    onMouseOut="this.className='menu2'"><a href="#">最新推荐</a>
    <div>
    <ul>
    <li><a href="#">我的主页</a></li>
    <li><a href="#">我的空间</a></li>
    <li><a href="#">我的相册</a></li>
    <li><a href="#">我的日志</a></li>
    </ul>
    </div>
    </li>
    <li onMouseOver="this.className='menu1'"
    onMouseOut="this.className='menu2'"><a href="#">联系我们</a>
    <div>
    <ul>
    <li><a href="#">我的主页</a></li>
    <li><a href="#">我的空间</a></li>
    <li><a href="#">我的相册</a></li>
    <li><a href="#">我的日志</a></li>
    </ul>
    </div>
    </li>
    </ul>
    </div>
    </body>
    </html>
    20107 月9

    IE浏览器提示保存文件navcancl解决办法

    点“开始->运行”输入“iexplore.exe -nohome -extoff” 打开浏览器

    首先取消锁定工具栏,禁用你安装的其他第三方工具栏..

    然后打开 工具->internet选项->高级->将“SmartScreen筛选器”勾掉.

    20107 月7

    实现鼠标拖动div交换位置

    <html>
    <head>
    <title>月影</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <style>
    body {margin:0px;padding:0px;font-size:12px;text-align:center;}
    body > div {text-align:center; margin-right:auto; margin-left:auto;}
    .content{width:900px;}
    .content .left{
            float:left;
            width:20%;
            border:1px solid #FF0000;
            margin:3px;
    }
    .content .center{float:left;border:1px solid #FF0000;margin:3px;width:57%}
    .content .right{float:right;width:20%;border:1px solid #FF0000;margin:3px}
    .mo{height:auto;border:1px solid #CCC;margin:3px;background:#FFF}
    .mo h1{background:#ECF9FF;height:18px;padding:3px;cursor:move}
    .mo .nr{height:80px;border:1px solid #F3F3F3;margin:2px}
    h1{margin:0px;padding:0px;text-align:left;font-size:12px}
    </style>
    <script>
    var dragobj={}
    window.onerror=function(){return false}
    function on_ini(){
            String.prototype.inc=function(s){return this.indexOf(s)>-1?true:false}
            var agent=navigator.userAgent
            window.isOpr=agent.inc("Opera")
            window.isIE=agent.inc("IE")&&!isOpr
            window.isMoz=agent.inc("Mozilla")&&!isOpr&&!isIE
            if(isMoz){
                    Event.prototype.__defineGetter__("x",function(){return this.clientX+2})
                    Event.prototype.__defineGetter__("y",function(){return this.clientY+2})
            }
            basic_ini()
    }
    function basic_ini(){
            window.$=function(obj){return typeof(obj)=="string"?document.getElementById(obj):obj}
            window.oDel=function(obj){if($(obj)!=null){$(obj).parentNode.removeChild($(obj))}}
    }
    window.onload=function(){
            on_ini()
            var o=document.getElementsByTagName("h1")
            for(var i=0;i<o.length;i++){
                    o[i].onmousedown=function(e){
                            if(dragobj.o!=null)
                                    return false
                            e=e||event
                            dragobj.o=this.parentNode
                            dragobj.xy=getxy(dragobj.o)
                            dragobj.xx=new Array((e.x-dragobj.xy[1]),(e.y-dragobj.xy[0]))
                            dragobj.o.style.width=dragobj.xy[2]+"px"
                            dragobj.o.style.height=dragobj.xy[3]+"px"
                            dragobj.o.style.left=(e.x-dragobj.xx[0])+"px"
                            dragobj.o.style.top=(e.y-dragobj.xx[1])+"px"
                            dragobj.o.style.position="absolute"
                            var om=document.createElement("div")
                            dragobj.otemp=om
                            om.style.width=dragobj.xy[2]+"px"
                            om.style.height=dragobj.xy[3]+"px"
                            dragobj.o.parentNode.insertBefore(om,dragobj.o)
                            return false
                    }
            }
    }
    document.onselectstart=function(){return false}
    window.onfocus=function(){document.onmouseup()}
    window.onblur=function(){document.onmouseup()}
    document.onmouseup=function(){
            if(dragobj.o!=null){
                    dragobj.o.style.width="auto"
                    dragobj.o.style.height="auto"
                    dragobj.otemp.parentNode.insertBefore(dragobj.o,dragobj.otemp)
                    dragobj.o.style.position=""
                    oDel(dragobj.otemp)
                    dragobj={}
            }
    }
    document.onmousemove=function(e){
            e=e||event
            if(dragobj.o!=null){
                    dragobj.o.style.left=(e.x-dragobj.xx[0])+"px"
                    dragobj.o.style.top=(e.y-dragobj.xx[1])+"px"
                    createtmpl(e)
            }
    }
    function getxy(e){
            var a=new Array()
            var t=e.offsetTop;
            var l=e.offsetLeft;
            var w=e.offsetWidth;
            var h=e.offsetHeight;
            while(e=e.offsetParent){
                    t+=e.offsetTop;
                    l+=e.offsetLeft;
            }
            a[0]=t;a[1]=l;a[2]=w;a[3]=h
      return a;
    }
    function inner(o,e){
            var a=getxy(o)
            if(e.x>a[1]&&e.x<(a[1]+a[2])&&e.y>a[0]&&e.y<(a[0]+a[3])){
                    if(e.y<(a[0]+a[3]/2))
                            return 1;
                    else
                            return 2;
            }else
                    return 0;
    }
    function createtmpl(e){
            for(var i=0;i<12;i++){
                    if($("m"+i)==dragobj.o)
                            continue
                    var b=inner($("m"+i),e)
                    if(b==0)
                            continue
                    dragobj.otemp.style.width=$("m"+i).offsetWidth
                    if(b==1){
                            $("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i))
                    }else{
                            if($("m"+i).nextSibling==null){
                                    $("m"+i).parentNode.appendChild(dragobj.otemp)
                            }else{
                                    $("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i).nextSibling)
                            }
                    }
                    return
            }
            for(var j=0;j<3;j++){
                    if($("dom"+j).innerHTML.inc("div")||$("dom"+j).innerHTML.inc("DIV"))
                            continue
                    var op=getxy($("dom"+j))
                    if(e.x>(op[1]+10)&&e.x<(op[1]+op[2]-10)){
                            $("dom"+j).appendChild(dragobj.otemp)
                            dragobj.otemp.style.width=(op[2]-10)+"px"
                    }
            }
    }
    </script>
    </head>
    <body>
    <div>
            <div id=dom0>
                    <div id=m0>
                            <h1>dom0</h1>
                            <div></div>
                    </div>
                    <div id=m1>
                            <h1>dom1</h1><div></div>
                    </div>
                    <div id=m2><h1>dom2</h1><div></div></div>
                    <div id=m3><h1>dom3</h1><div></div></div>
            </div>
            <div id=dom1>
                    <div id=m4><h1>dom4</h1><div></div></div>
                    <div id=m5><h1>dom5</h1><div></div></div>
                    <div id=m6><h1>dom6</h1><div></div></div>
                    <div id=m7><h1>dom7</h1><div></div></div>
            </div>
            <div id=dom2>
                    <div id=m8><h1>dom8</h1><div></div></div>
                    <div id=m9><h1>dom9</h1><div></div></div>
                    <div id=m10><h1>dom10</h1><div></div></div>
                    <div id=m11><h1>dom11</h1><div></div></div>
            </div>
    </div>
    </body>
    </html>
    20107 月1

    收藏:魅族M8 Android内核源码和固件下载

    魅族官方提供了M8的Android内核源码,包含了完整的驱动以及说明,由于MEIZU M8的物理硬件和iPhone一样平时操作的只有1个Home键无法模拟,Android的Back、Menu以及其他因素魅族放弃了M8跑Android的计划。由于M8使用的是Samsung ARM11内核的S3C6410工作频率为667MHz,山寨厂商有一定的借鉴价值。

      有关魅族M8的ADB驱动 http://m8-android-kernel.googlecode.com/files/M8_6410_adb_driver.rar

      M8的Android编译好固件下载,刷机方法和Wince的一致,下载后直接解压放到USB Storage的根目录 http://code.google.com/p/m8-android-kernel/source/browse/bin/m8_android.rar 

      M8 for Android源码托管在Google Code上面,使用SVN工具直接提取 浏览地址 http://code.google.com/p/m8-android-kernel/source/browse/#svn/trunk 需要注意的是Android开发网发现有关Modem这块代码没有,涉及到了英飞凌的机密,不过可以看到编译好的库,直接挂上即可。

      SVN Checkout地址 http://m8-android-kernel.googlecode.com/svn/trunk

      最后是Android123找到的有关M8的移植文章网上整理的word文档,有兴趣的网友可以DIY下,不过Android开发网表示Android和M8原始的Wince比较差距较大,个人还是建议使用完善的WinCE系统,毕竟可以直播RMVB、WinCE对于M8更适合些。

      1. make menuconfig

    A. 串口改成串口3输出打印信息。
    (一) (root=/dev/nfs init=/init nfsroot=192.168.1.10:/nfs ip=192.168.1.100 console=ttySAC2,115200
    console=ttySAC2,串口2输出,必须与下面同时修改
    (二) System Type  —>S3C UART to use for low-level messages—>2
    值设成2,即串口2输出,必须与上面同时修改。

    B. Onenand驱动支持
    (一) Device Drivers  —>Memory Technology Device (MTD) support  —>OneNAND Device Support  —>
    [*]   Verify OneNAND page writes                                
    <*>   OneNAND Flash device via platform device driver
    (二) onenand的支持
    从贺超提供的linux2.6.27包drivers\mtd\onenand目录复制s3c6410.h,s3c_onenand.c,s3c_onenand.h提供对三星onenand的支持
    (三) Makefile修改
    drivers\mtd\onenand\Makefile文件最后添加一行:onenand-objs = s3c_onenand.o,编译s3c_onenand.o,连接进内核。
    (四) 在arch\arm\mach-s3c6410\mach-smdk6410.c中
     
    static struct platform_device pmem_gpu1_device = {
     .name = “android_pmem”,
     .id = 1,
     .dev = { .platform_data = &pmem_gpu1_pdata },
    };
    #endif
    的后面添加代码:
    /*add by liuyihui 2009-08-21*/
    /*
    *添加onenand驱动支持
    */
    /* OneNAND Controller */
    /* OneNAND flash controller */
    #define S3C64XX_PA_ONENAND     (0x70100000)
    #define S3C64XX_SZ_ONENAND     SZ_1M
    static struct resource s3c_onenand_resource[] = {
     [0] = {
      .start = S3C64XX_PA_ONENAND,
      .end   = S3C64XX_PA_ONENAND + S3C64XX_SZ_ONENAND – 1,
      .flags = IORESOURCE_MEM,
     }
    };
    或者替换新的代码:
     arch\arm\plat-s3c64xx\devs.c,
    linux/arch/arm/mach-s3c6400/include/mach/map.h
    struct platform_device s3c_device_onenand = {
     .name    = “onenand”,
     .id    = -1,
     .num_resources   = ARRAY_SIZE(s3c_onenand_resource),
     .resource   = s3c_onenand_resource,
     .dev.platform_data = &s3c_nand_mtd_part_info
    };
    /*add end*/
    在数组static struct platform_device *smdk6410_devices[] __initdata = {的最后添加:
     &s3c_device_onenand /*add by liuyihui 2009-08-21*/
    (五) 分区表修改:使userdata从0x0a000000开始
    文件linux/arch/arm/plat-s3c/include/plat/partition.h中:
     
            {
                    .name  = “cache”,
                    .offset  = MTDPART_OFS_APPEND,
                    .size  = (67*SZ_1M)+0x1000000,//orig:(67*SZ_1M)/*modified by cefanty 2009-08-21*/
            },
     
    (六) 修改drivers\mtd\onenand\generic.c
    复制drivers\mtd\onenand\generic.c替换掉。
     

    C. Device Drivers  —>Input device support  —>  []   Keyboards  —>
    (一) 暂时去掉键盘支持,因为键盘占用了GPK14口,GPK14口在M8是USB供电开关的GPIO,拉高才能用USB

    D. Device Drivers  —> [*] USB support  —>  <*>   USB Gadget Support  —>
    (一) <*>   USB Gadget Drivers (Ethernet Gadget (with CDC Ethernet supp
    (二) Ethernet Gadget (with CDC Ethernet support)             
    (三) [ ]       RNDIS support
    (四) d.1)选择Ethernet Gadget (with CDC Ethernet supp,用于把M8模拟成网卡,实现nfs挂载系统。同时去掉RNDIS support支持,因为ubuntu下没有驱动支持。
    (五) drivers\usb\gadget\s3c-udc-otg-hs.c修改为USB使用外部晶振
     
    //writel(0x20, S3C_USBOTG_PHYCLK); /*commented by liuyihui 2009-08-24*/
    writel(0x00, S3C_USBOTG_PHYCLK);  /*00:USB使用外部晶振。modified by liuyihui 2009-08-24*/

    2. 驱动移植和修改

    A. LCD驱动移植
    i. drivers\video\Kconfig,搜索config FB_S3C_LTS222QV,在后面添加如下选项
    config FB_S3C_LMS340KC01
     bool “LMS340KC01”
     —help—
     TBA
    ii. 添加驱动:drivers\video\samsung\s3cfb_lms340kc01.c
     
    a) 复制刘奕辉开发的s3cfb_lms340kc01.c驱动到目录drivers\video\samsung\
    b) 在drivers\video\samsung\Makefile文件最后添加内容:
    obj-$(CONFIG_FB_S3C_LMS340KC01) += s3cfb_lms340kc01.o
    iii. 修改drivers\video\samsung\s3cfb_fimd4x.c,在函数s3cfb_set_gpio最后注释代码,添加:
     

    #if 0/*commented by liuyihui 2009-08-24*/
     /* module reset */
     if (gpio_is_valid(S3C64XX_GPN(5))) {
      err = gpio_request(S3C64XX_GPN(5), “GPN”);

      if (err) {
       printk(KERN_ERR “failed to request GPN for ”
        “lcd reset control\n”);
       return err;
      }

      gpio_direction_output(S3C64XX_GPN(5), 1);
     }

     mdelay(100);

     gpio_set_value(S3C64XX_GPN(5), 0);
     mdelay(10);

     gpio_set_value(S3C64XX_GPN(5), 1);
     mdelay(10);

     gpio_free(S3C64XX_GPF(15));
     gpio_free(S3C64XX_GPN(5));
    #endif

    /*add by liuyihui 2009-08-24*/
    /*
    *打开M8 LCD需要用到的GPIO口
    */
    #if 1 //M8 GPIO set hight
     /* module reset *///LCD_nRESET_SHIFT/*4*/
     if (gpio_is_valid(S3C64XX_GPQ(4))) {
      err = gpio_request(S3C64XX_GPQ(4), “GPQ”);

      if (err) {
       printk(KERN_ERR “failed to request GPQ for ”
        “lcd reset control\n”);
       return err;
      }
      gpio_direction_output(S3C64XX_GPQ(4), 1);
     }
     mdelay(100);
     gpio_free(S3C64XX_GPQ(4));

     /* module reset *///LCD_nSS_SHIFT/*5*/
     if (gpio_is_valid(S3C64XX_GPQ(5))) {
      err = gpio_request(S3C64XX_GPQ(5), “GPQ”);

      if (err) {
       printk(KERN_ERR “failed to request GPQ for ”
        “lcd reset control\n”);
       return err;
      }
      gpio_direction_output(S3C64XX_GPQ(5), 0);
     }
     mdelay(100);
     gpio_free(S3C64XX_GPQ(5));
      
     /* module reset *///LCD_MOSI_SHIFT/*7*/
     if (gpio_is_valid(S3C64XX_GPQ(6))) {
      err = gpio_request(S3C64XX_GPQ(6), “GPQ”);

      if (err) {
       printk(KERN_ERR “failed to request GPQ for ”
        “lcd reset control\n”);
       return err;
      }
      gpio_direction_output(S3C64XX_GPQ(6), 1);
     }
     mdelay(100);
     gpio_free(S3C64XX_GPQ(6));
     
      /* module reset *///LCD_MOSI_SHIFT/*7*/
     if (gpio_is_valid(S3C64XX_GPQ(7))) {
      err = gpio_request(S3C64XX_GPQ(7), “GPQ”);

      if (err) {
       printk(KERN_ERR “failed to request GPQ for ”
        “lcd reset control\n”);
       return err;
      }
      gpio_direction_output(S3C64XX_GPQ(7), 1);
     }
     mdelay(100);
     gpio_free(S3C64XX_GPQ(7));
     
     /* module reset *///LCD_CLK_SHIFT/*8*/
     if (gpio_is_valid(S3C64XX_GPQ(8))) {
      err = gpio_request(S3C64XX_GPQ(8), “GPQ”);

      if (err) {
       printk(KERN_ERR “failed to request GPQ for ”
        “lcd reset control\n”);
       return err;
      }
      gpio_direction_output(S3C64XX_GPQ(8), 1);
     }
     mdelay(100);
     gpio_free(S3C64XX_GPQ(8));

    #endif

     return 0;
    }
    /*add end*/
    c) 
    iv. 修改drivers\video\samsung\s3cfb_spi.c,在函数s3cfb_set_gpio最后注释代码,添加:
     
    在代码#elif defined(CONFIG_PLAT_S3C64XX)后面添加:

    #define MEIZU_M8
    #ifdef MEIZU_M8
    #define S3C_FB_SPI_CLK(x) (S3C64XX_GPQ(8 + ( 4)))
    #define S3C_FB_SPI_MOSI(x) (S3C64XX_GPQ(7 + (4)))
    #define S3C_FB_SPI_CS(x) (S3C64XX_GPQ(6 + (4)))
    #else
    #define S3C_FB_SPI_CLK(x) (S3C64XX_GPC(1 + (ch * 4)))
    #define S3C_FB_SPI_MOSI(x) (S3C64XX_GPC(2 + (ch * 4)))
    #define S3C_FB_SPI_CS(x) (S3C64XX_GPC(3 + (ch * 4)))
    #endif

    B. 触摸屏移植
    drivers\input\touchscreen:synaptics510_i2c.c,synaptics510_i2c.h,Makefile,Kconfig
          
    C. 按键移植
    覆盖如下文件:目录drivers\input\keyboard\下的:gpio_keys.c
     

    3. Busybox在Android上的使用

    To build busybox
    • Download the latest version of busybox from the following website. At the time of writing the latest version was v.1.13.3.
    http://www.busybox.net
    • Extract the busybox source:
    tar jxf busybox-1.13.3.tar.bz2
    • Configure busybox by running menuconfig
    cd busybox-1.13.3/
    make menuconfig
    • In menuconfig set the following options
    Busybox Settings –> Build Options –> Build Busybox as a static binary (no shared libs)  –  Enable this option by pressing “Y”
    Busybox Settings –> Build Options –> Cross compiler prefix  –  Set this option equal to “arm-none-linux-gnueabi-”
    Busybox Settings –> Installation Options –> Don’t use /usr  –  Enable this option by pressing “Y”
    Linux Module Utilities  —>  [ ] Simplified modutils 这项不能选,否则insmod 驱动模块加载会提示找不到*.ko驱动文件的路径
    • Export path to where the cross-compiler is located on the host, for example:
    export PATH=/opt/arm/arm-2007q3/bin:$PATH
    • Build busybox
    make
     
    Installing Busybox
    ________________________________________
    To install busybox in the target file-system
    • Create a /bin directory in the target file-system. For example:
    mkdir /<path-to-android-fs>/bin
    • Copy the busybox binary to the /bin directory in the target file-system
    cp busybox /<path-to-android-fs>/bin
    •  Install the busybox command line tools on the target by executing the following commands:
    cd /bin
    ./busybox –install
     
    Make the Busybox shell the default shell
    ________________________________________
    To make the busybox shell the default shell, edit the file “init.rc” in the target file-system as follows:
    • Edit the console service so that it runs the busybox shell and not the default shell by replacing:
    service console /system/bin/sh
    With:
    service console /bin/sh
    • Add the path of the busybox command line tools to the system path variable by replacing:
    export PATH /sbin:/system/sbin:/system/bin:/system/xbin
    With
    export PATH /bin:/sbin:/system/sbin:/system/bin:/system/xbin

    Android cupcake 1.5版移植

    1. 在Android挂载SD移植

    cupcake 1.5版需要改写下列文件。

    A.    编译mountd,并在文件系统中启动这一服务。

       修改 system/core/mountd/Android.mk文件,开放最后一行

        # disabled – we are using vold now instead
        # include $(BUILD_EXECUTABLE)
        为:

        # disabled – we are using vold now instead
        include $(BUILD_EXECUTABLE)

    B.     增加 安装mountd.conf 文件

          修改 system/core/rootdir/init.rc文件

       释放下两行:

         service mountd /system/bin/mountd
              socket mountd stream 0660 root mount
    C.     修改  system/core/rootdir/Android.mk 文件, 增加 etc/mountd.conf \,如下:

        copy_from := \
           etc/dbus.conf \
           etc/init.goldfish.sh \
           etc/mountd.conf \
           etc/hosts
    D. 修改根文件系统的system\etc \mountd.conf文件:
    block_device    /dev/block/mmcblk0

    20106 月28

    触摸屏全屏浏览器(可定时关机) C#2005 源代码

    1、星期一至五,会按设定时间关机,你可以在出现关机提示时点取消(倒计时30秒);
    2、星期六日,启动程序即提示关机,无操作则自动关机,若点取消,还会在设定的时间再一次提示关机(倒计时30秒);
    3、按*号后输入密码,退出程序回到桌面;
    4、参数设置:找到安装目录下的SystemConfig.xml文件,其中starturl为起始网页地址;returntime为多久无操作返回起始网页(单位:分钟);offtime为每天关机时间;exitkey为退出程序的密码;
    5、软件需要.NET2.0环境,环境安装包有些大,就不上传了,请到 http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=zh-cn 下载

    开源地址:http://code.google.com/p/full-screen-touch-browser/

    可以通过本站下方的EMAIL与作者交流~:)

    20106 月28

    PHP webservice客户端 推送文章和附件(xsd:base64Binary)

    <?php
    //设定字符集
    header('Content-Type:text/html;charset=utf-8');
    
    //调用webserver接口class类
    require_once('./lib/nusoap.php');
    
    require_once('Article.class.php');     //封装文章信息类
    require_once('Attribute.class.php');    //封装字段attr类
    require_once('Appendix.class.php');     //封装附件信息类
    
    //-------------------封装推送信息内容开始
    $a1 = new Attribute();
    $a1->setAttrName('aaa');
    $a1->setAttrValue('aaaaa');
    $a2 = new Attribute();
    $a2->setAttrName('bbb');
    $a2->setAttrValue('bbbbbb');
    $ar[] = $a1;
    $ar[] = $a2;
    echo $ar[0]->getAttrName('aaa');
    
    $Article = new Article();
    $Article->setArticleContent(mb_convert_encoding('vvvvvvvvvvv<a href="a.txt">a.txt</a>...<img src="tmp.jpg">','UTF-8','GBK'));   //文章正文
    $Article->setArticleTitle(mb_convert_encoding("12212AAABBBABAAA".date('Ymd'),'UTF-8','GBK'));   //文章题目
    $Article->setAttr($ar);      //文章定制属性组
    $Article->setCreateTime(date('YmdHis'));   //文章创立时间
    $Article->setDepartment("tongjiju");    //用户部门
    $Article->setDescription("description");      //文章描述
    $Article->setImportant("0");      //文章级别
    $Article->setKeyword("keyword");       //文章关键字
    $Article->setLoginName("tongjiju");     //用户登录名
    $Article->setModifyTime(date('YmdHis'));   //文章修改时间
    $Article->setPassword("tongjiju");     //用登录口令
    $Article->setWebName(mb_convert_encoding("市政府子网站群二期 > 市统计局 > 市情简介",'UTF-8','GBK')); //网站的名称
    $Article->setCommendId(0);
    $client = new nusoap_client("http://221.122.*.*:7006/cmsweb/services/TransferArticle?wsdl", true);
    $err = $client->getError();
    if ($err) {
    echo "<h2>Constructor error</h2><pre>". $err ."</pre>";
    }
    $godata='';
    //文章中存在附件 'finishMark'=>false-------------------------------------------------------------
    $godata=array('article'=>$Article,'finishMark'=>false);
    $result = $client->call("transferContent", $godata);
    if ($client->fault) {
    echo "<h2>Fault</h2><pre>";
    print_r($result);
    echo "</pre>";
    } else {
    $err = $client->getError();
    if ($err) {
       echo "<h2>Error</h2><pre>" . $err . "</pre>";
    } else {
       echo "<h2>Result</h2><pre>";
       print_r($result);
       echo "</pre>";
    }
    }
    $aid=$result['transferContentReturn'];
    
    if ($aid){
    
    //第一个附件 'finishMark'=>false-------------------------------------------------------------
    $filepath='a.txt';
    $fp=fopen($filepath, "rb");
        $filedata=fread($fp, filesize($filepath));
    fclose($fp);
    $Appendix = new Appendix();
    $Appendix->setFileContent(base64_encode($filedata));
    $Appendix->setFileName('a.txt');
    $Appendix->setFileType('txt');
    $godataf=array('aid'=>$aid,'apd'=>$Appendix,'finishMark'=>false);
    $resultf = $client->call("transferAppendix", $godataf);
    echo '<br><br>';
    echo "<h2>Result_f</h2><pre>";
    print_r($resultf);
    echo "</pre>";
    
    //最后附件 'finishMark'=>true-------------------------------------------------------------
    $filepath2='tmp.jpg';
    $fp2=fopen($filepath2, "rb");
        $filedata2=fread($fp2, filesize($filepath2));
    fclose($fp2);
    $Appendix2 = new Appendix();
    $Appendix2->setFileContent(base64_encode($filedata2));
    $Appendix2->setFileName('tmp.jpg');
    $Appendix2->setFileType('image_title');//image_title 此图片为标题图
    $godataf2=array('aid'=>$aid,'apd'=>$Appendix2,'finishMark'=>true);
    $resultf2 = $client->call("transferAppendix", $godataf2);
    echo '<br><br>';
    echo "<h2>Result_f2</h2><pre>";
    print_r($resultf2);
    echo "</pre>";
    }
    ?>
    20106 月28

    PDF在线阅读开发经验(FlexPaper+SWFTools+SaveAsPDFandXPS)

    1、使用SaveAsPDFandXPS将office文档转换成PDF

    http://www.microsoft.com/downloads/details.aspx?FamilyID=4d951911-3e7e-4ae6-b059-a2e79ed87041&displaylang=en

    微软原计划让Office 2007直接支持保存为PDF格式,但引起了Adobe的不满,并被指责为垄断,最终被迫放弃,改为以插件的形式予以支持,插件大家都知道怎么回事儿,默认不装,要用你的自己找来装上。不过微软针对这件事情也做出了一个回应:发布XPS, XPS则是微软自己利用XML技术开发的新型文档格式。

    该插件支持Office 2007的8个组件,包括Word、Excel、Access、PowerPoint、InfoPath、OneNote、Publisher和Visio。安装插件后,用户即可在上述组件中将相应文档存储为PDF格式或XPS格式,还可以方便地将文档保存为PDF/XPS格式的E-mail附件。

    2、下载 SWFTools

    SWFTools 是一组用来处理 Flash 的 swf 文件的工具包,包括:

    1. 合并工具 swfcombine
    2. 抽取工具 swfextract
    3. PDF/JPEG/PNG/AVI/TTF/WAV 到 SWF 的转换工具 :pdf2swf, jpeg2swf, png2swf, avi2swf, font2swf, and wav2swf|
    4. 文本解析工具 swfstrings
    5. SWF 解析器 swfdump
    6. SWF 读写库 rfxswflib

    其中把pdf转成swf的工具就是pdf2swf了。在命令行中运行pdf2swf src.pdf des.swf一般能满足需求。而命令行参数可以通过pdf2swf -f得到:

    -h , –help Print short help message and exit 打印帮助信息
    -V , –version Print version info and exit 打印版本号
    -o , –output file.swf Direct output to file.swf. If file.swf contains ‘13568621′ (file13568630.swf), then each page指定输出的swf文件名
    -p , –pages range Convert only pages in range with range e.g. 1-20
    or 1,4,6,9-11 or
    指定转换的页面范围,使用的页码描述方法与打印机打印文件时候的选页一样

    -P , –password password Use password for deciphering the pdf.指定打开pdf的密码
    -v , –verbose Be verbose. Use more than one -v for greater effect.转换时输出详细的内容
    -z , –zlib Use Flash 6 (MX) zlib compression.使用Flash 6的zlib压缩机制
    -i , –ignore Allows pdf2swf to change the draw order of the pdf. This may make the generated允许程序修改pdf的绘制顺序,可能会导致结果与原来有差异
    -j , –jpegquality quality Set quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)设置转换其中的jpeg图片的质量,从0到100,默认值是85。
    -s , –set param=value Set a SWF encoder specific parameter. See pdf2swf -s help for more information. 设置SWF转码时候的参数,具体参数可以用pdf2swf -s help获取
    -w , –samewindow When converting pdf hyperlinks, don’t make the links open a new window. 设置转换后的swf打开原pdf中的连接时使用相同的窗口
    -t , –stop Insert a stop() command in each page. 在每页结尾添加一个stop()命令
    -T , –flashversion num Set Flash Version in the SWF header to num. 设置SWF所使用的flash版本号
    -F , –fontdir directory Add directory to the font search path. 指定字体文件所在路径
    -b , –defaultviewer Link a standard viewer to the swf file. 指定默认的swf导航文件,用来翻页、放大缩小等等
    -l , –defaultloader Link a standard preloader to the swf file which will be displayed while the main swf is loading. 指定默认的swf加载文件,用来显示加载进程效果
    -B , –viewer filename Link viewer filename to the swf file. 指定swf导航文件,作用同-b
    -L , –preloader filename Link preloader filename to the swf file. 指定swf加载文件,作用同-l
    -q , –quiet Suppress normal messages. Use -qq to suppress warnings, also. 不打印普通信息,用-qq就不打印警告信息。
    -S , –shapes Don’t use SWF Fonts, but store everything as shape. 不使用字体,所有都转为形状。
    -f , –fonts Store full fonts in SWF. (Don’t reduce to used characters). 在swf中保存全部字体。
    -G , –flatten Remove as many clip layers from file as possible. 在文件中尽量去除影片层,合并它们
    -I , –info Don’t do actual conversion, just display a list of all pages in the PDF. 不做实际转换,仅显示PDF的信息。
    -Q , –maxtime n Abort conversion after n seconds. Only available on Unix. 如果运行时间超时则退出。

    3、java程序,实现上传PDF自动转换成SWF文件

    //ajax方法,先解密传过来的文件名,根据判断生成SWF文件后跳转至FLASH页面
    
    if (ajaxAction.equals("exeflash"))   //把PDF成SWF
            {
                String fn = DecodeUtil.Decrypt(StringUtil.null2String(request.getParameter("fn")).trim()).toLowerCase();
                try {
                    if (!"".equals(fn) && fn.indexOf("/") > -1 && fn.indexOf(".pdf") > -1) {
                        Map webfileupmap = (Map) Globals.SYS_UPLOAD_CONFIG.get("webfile");
                        String webfilepath = StringUtil.null2String(webfileupmap.get("path")).replace("\\", "\\\\");
                        fn = fn.substring(fn.lastIndexOf("/") + 1);//aa.pdf
                        webfilepath = webfilepath + fn;
                        File f = new File(webfilepath);
                        if (!f.exists()) {
                            return "error";
                            //如果PDF文件不存在则退出
                        }
                        Map webupmap = (Map) Globals.SYS_UPLOAD_CONFIG.get("web");
                        String webpath = StringUtil.null2String(webupmap.get("path")).replace("\\", "\\\\");
                        String urlpath = StringUtil.null2String(webupmap.get("urlpath"));
                        String wname = fn.substring(0, fn.indexOf(".")) + ".swf";
                        webpath = webpath + wname;
                        String wurl = urlpath + wname;
                        boolean issc = false;
                        File f2 = new File(webpath);
                        if (!f2.exists()) {
                            issc = true;
                            //如果文件不存在则生成
                        }
                        if (issc) {
                            String cmd = "C:\\SWFTools\\pdf2swf " + webfilepath + " -o " + webpath + " -T 9";
                            if (StringUtil.executeCmdFlash(cmd) == false) {
                                return "error";
                            }
                            System.out.println("cmd::::::" + cmd);
                        }
    
                        File f1 = new File(webpath);
                        if (f1.exists()) {
                            ajaxstr = DecodeUtil.Encrypt(wurl);
                        }
    
                    } else {
                        return "error";
                    }
                } catch (Exception e) {
                    Globals.Logger("发生错误:" + e, 2);
                }
    
            }

    注意:

    String cmd = “C:\\SWFTools\\pdf2swf ” + webfilepath + ” -o ” + webpath + ” -T 9″;

    加 “-T 9” 参数,设置输出版本为flash9,解决PDF文件只有一页,生成的swf不能播放的问题。

    另外,若PDF内表格元素过多,在转换时会抛出一堆异常错误。似乎还没有好的解决办法?

    //java调用cmd命令行方法
    
    /**
         * 运行可执行文件
         *
         * @param cmd
         * @return String
         */
        public static synchronized boolean executeCmdFlash(String cmd) {
    
            try {
                final Process process = Runtime.getRuntime().exec(cmd);
                Runtime.getRuntime().addShutdownHook(new Thread() {
                    public void run() {
                        process.destroy();
                    }
                });
                InputStreamReader inputstreamreader = new InputStreamReader(process.getInputStream());
                char c = (char) inputstreamreader.read();
                if (c != '\uFFFF')
                    stdout.append(c);
                while (c != '\uFFFF') {
                    if (!inputstreamreader.ready()) {
                        System.out.println(stdout);
                        try {
                            process.exitValue();
                            break;
                        }
                        catch (IllegalThreadStateException _ex) {
                            try {
                                Thread.sleep(100L);
                            }
                            catch (InterruptedException _ex2) {
                            }
                        }
                    } else {
                        c = (char) inputstreamreader.read();
                        stdout.append(c);
                    }
                }
                try {
                    inputstreamreader.close();
                }
                catch (IOException ioexception2) {
                    System.err.println("RunCmd : Error closing InputStream " + ioexception2);
                    return false;
                }
            } catch (Throwable e) {
                e.printStackTrace();
                Globals.Logger("发生错误:" + e, 2);
                return false;
            }
    
            return true;
        }

    4、利用FlexPaper展示

    FlexPaper是一个被设计用来与PDF2SWF一起使用,开源轻量级的在浏览器上显示各种文档的组件, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。也可以通过将一些例如Word、PPT等文档转成PDF,然后实现在线浏览。

    SwfFile : escape(host+"/upload/web/2010-05-24-10-21-51139.swf"),
          Scale : 0.6,
          ZoomTransition : "easeOut",
          ZoomTime : 0.5,
            ZoomInterval : 0.1,
            FitPageOnLoad : false,
            FitWidthOnLoad : true,
            PrintEnabled : false,
            FullScreenAsMaxWindow : true,
            localeChain: "zh_CN" //设置为中文
          };

    5、演示地址

    http://www.4th-games.org.cn/sis/public/info.html?doAction=scsg&bsdxid=1009&cdate=all

    20106 月26

    让电脑替你说"I IOVE YOU"

    让电脑替你说"I IOVE YOU":新建一个记事本,在里面输入 CreateObject(“SAPI.SpVoice”).Speak “I love YOU” 保存扩展名为 .VBS 文件 如:我爱你.vbs 双击运行,电脑就会说 i love you 了,如果编好给心爱的人的话一定会让TA惊喜不已!