Browsing the archives for the D2 category

PDF字体混乱

很久没写博客了,虽然最近系统上线还算稳定,也不用像前几个月一样加班到半夜三更,但每一天还是过得比较繁忙,可能因为学习的东西比开发时更加多了吧。趁着这段时间开发任务不重,多学点其他东西了。
我也是在这次开发中接触到PDF的,因为采用了服务器PDF打印的方式,所以对PDF势必需要一些了解。起初我对PDF并没有太大的关注,觉得只是一种文件格式而已,用了activePDF生成PDF,丢到客户端一打印就完事了,但事实并没有那么简单。
首先activePDF对中文的支持就让我头疼了很久,对PDF文件格式的不了解,让我只能一个个去摸索一个个去测试,对于字符编码更是一头雾水。搞定这个以后,又出现了始料不及的事情,用户机上打印出来的字体和我们开发测试机上的完全不同,甚至说有点随机,难道PDF还依赖本地字库?
结果在网上查了很多资料,终于看到了内嵌字库这个东西,而且发现中文字体并不会自动内嵌到PDF中,而西文字体则可以,然后不同客户机安装了不同的字体,PDF找不到所要的字体就会使用最相近的一种,就出现了客户机字体各异的问题。
解决的方法就是把中文字体内嵌到PDF中,我用的方法是打印到文件,在acrobat中打印到文件,选择下载亚洲字体,就能把中文字体嵌入到PDF中,做到与客户机无关了。这样做的缺点就是PDF中的一些信息会丢失,比如表单域的信息,书签等等,所以我是先做好模板嵌入字体,然后在这个基础上加上表单域供activePDF调用。
PDF也是一滩很深的水哦,以前太小看它了-_-

0 Comments

Regex正则匹配xml节点

      使用正则匹配文档中的XML块,在文档中有多个<example></example><example></example>,则需要匹配最近的结束标签</example>。      在工作中我使用了如下正则来实现这个功能,<example>[^@]*?</example>,实现了我需要的效果,但是对于xml结构的匹配还是很弱,继续研究。正则这水很深。。。

0 Comments

将用户限制在框架内,防止直接访问页面地址

      应用情景:用户组权限控制。在一个系统中,防止用户直接访问页面地址,只能在首页如main.jsp框架页面中操作,一旦尝试刷新框架页面或者在地址栏中尝试访问系统中的其他页面,就注销跳回登陆页面。      比如工行的网银,就有这样的措施。用户登录以后,就在一个index.jsp框架中,即使知道某个功能页面A.jsp,在地址栏中输入并跳转,立刻就会注销跳回登录页面。      近日在修改系统一个小问题时,就碰到了这样的问题,系统有session判断,但是对用户组权限并没有限制,就意味着存在如下可能,普通用户知道某个系统管理页面地址后,用普通用户登录后,直接访问地址就能实现系统管理功能了。      如何方便的解决这个问题?我采用了上面的思路。登录后进入main.jsp框架页面,所有操作都在框架中实现。在框架中加入如下js(注销暂时不加入)      window.onunload=function(){           alert(“谢谢使用”);           top.location = “login.jsp”;}      这样,一旦对框架页进行刷新,或者想要直接访问页面,都会触发窗口的onunload事件,跳转页面。      有人也许会说,那我再开个新窗口直接访问啊,但是你不要忽略了,系统是有session验证的。新开窗口就意味着新session,需要重新登录,但登录后会被强制跳转到main.jsp框架页,这时你再想访问就会触发onunload。       但是在实际环境中,这个方法还是属于比较简单的,并且会碰到一些问题,其中一个就是刷新页面却不发生跳转,我现在这个问题是用jsp的session实现的,用到了服务端的东西。       和工行网银的实现还是有很大差距,也没有考虑客户端禁用js的情况,因此,还有待学习:)

0 Comments

IE浏览器下jQuery的ajax失效的解决方法

      最近用jQuery做项目,用到$.ajax功能,在Chorme下能够正确提交,但是在IE下却失效,没有反应,IE6和IE7都一样。      上网找了下,关键原因如下:      中文版本的IE默认编码是gb2312,无论输出的是英文还是中文文,如果没强制修改页面编码,都认为是gb2312。      解决方法就是在ajax的目标文件中加入header(‘Content-Type:text/html;charset=utf-8′);(我的用的PHP)      郁闷的IE。。。

2 Comments

无处不在的用户体验

        用户体验(User Experience),是近年来一个出现频率非常高的词,特别是在互联网上,包括我,也是在2007年的岁末开始了解它的。其实用户体验并不单单出现在互联网上,也不是计算机界的特产,而是伴随任何产品和用户出现的。        在宾馆里,有一张书桌,上面有两个三孔插座,一个插了电视机,一个插了水壶,这时你发现边上还放着一条网线,恩,不错,还提供了上网服务。当你开心的把电脑打开,接上网线,突然问题来了,电脑的电源插哪里?晚上睡觉时,想给手机充电,恩,很简单,插上电源呗,但你寻遍床边没发现有插座,最后你把手机放在了书桌上充电,你躺在床上想用手机时会不会觉得不方便呢?        用户体验存在于我们身边各种地方,只要用到产品,用到服务,或者说有人用,都存在用户体验。        但是计算机和网络的出现将这种用户体验明显化了。根据用户的体验不断改进产品,这是一个每个人都会的方法。但是它涉及到了一个更改成本问题,恰恰计算机的出现降低了这种成本,因此,用户体验在计算机和网络上被提到的次数更多。还有一个原因,就是使用率的问题,住到上面例子中的宾馆可能一年里不会有几次,但如果换成上网,一旦成为一个网站的常客,由于访问成本非常低,你的访问频率也会相对较高,对于一个经常用的东西,人们就对用户体验有了较高的要求。        以淘宝网为例子,它经常会调整页面设置和各种购物流程来给用户更好的体验,有些是成功的,有些也会失败。但是在上面宾馆的例子中,这个就有点不可想象了,经常进行装修?没几个宾馆受得了吧,还要承担失败的风险。        因此,用户体验对网站更为重要,特别是常用的一些站点。以前在淘宝网买自动发货的商品,付完款后还要手动返回我的淘宝里的已买到宝贝中提取卡密,很不方便。现在已经修改成付完款直接跳转到已买到宝贝,购物流程顺畅了很多。其实就是一个简单的改动,却能给用户带来很好的体验。研究用户体验的魅力大概也在此吧,当一件商品被非常多的人非常频繁的使用时,用户体验就是你必须考虑的一样东西,当然,没有良好的用户体验的产品,大部分也不能在竞争中存活下来。

0 Comments

验证数据的基本原则

1.防患于未然,而不是事后责备。校验错误的表单不应该被用户提交。防止,不责骂原则的意思是,能够准确无误的防止用户犯错误,那么就应该那么做,而不是允许他们犯错误,而事后责备他们。当做客户端校验时,明显的违反这一原则的情况是,当用户已经提交完整个表单以后,校验用户的输入数据。在Flex应用程序中,你可以创建一个行为,触发校验器,相应表单上提交按钮的单击事件。2.马上给出反馈用户操作控件时应该能够得到即时的反馈。当控件值变为有效时,用户应该收到正确的反馈。当控件值变为无效时应该得到错误的反馈。当用户离开控件时给出用户反馈,也违反上一条原则。当控件没有给出用户即时反馈,用户只有在离开控件时才能发现错误。要更正错误,用户需要返回控件,因此会花费更多的努力。(这个例子也违反了另一个相关的原则:考虑用户的操作)。更重要的,当用户编一个一个校验错误的输入框的值,用户不知道是否用户的改变会使控件值生效。用户需要离开控件才能知道结果,并且如果依然不合法则需要返回控件继续改变它。默认的Flex校验器的行为监听valueCommit事件。这导致行为描述就像刚才的那样,只有当用户离开控件以后才能收到反馈。为了给出即时反馈,你必须手工指定触发校验响应change事件,而不是valueCommit事件。3.让用户工作虽然给出即时提示是好事情,你的应用程序在一定程度上,还应该做到不中断用户工作流程。漂浮提示框不中断用户,通常是最好的玄色。只有当完全必要的时候,才能够使用完全中断用户操作的模式对话窗口。4.验证有罪之前,都是清白的只有用户与控件交互以后,用户在校验失败后应该给出警告。

3 Comments

兼容IE6/IE7/FF的CSS hack

万恶的IE6,继续着噩梦。兼容三类浏览器的CSS Hack:IE 6 and belowUse * html {} to select the html element.IE 7 and belowUse *+html, * html {} to select the html element.IE 7 onlyUse *+html {} to select the html element.IE 7 and modern browsers onlyUse html>body {} to select the body element.Modern browsers only (not IE 7)Use html>/**/body {} to select [...]

0 Comments

css自适应图片大小(固定法)

代码如下:img{max-width:780px;width:e­xpression(document.body.clientWidth > 780? “780px”: “auto” );} 效果:图片width大于780px时,强制width设为780px,height等比例缩放。e­xpression即把css和js关联起来,IE5+版本支持。Firefox不支持,所以使用了max-width来设置。不过e­xpression比较耗浏览器资源,看个人喜好使用了。

0 Comments

CSS2的盒模型示意

* IE计算2个div之间的距离时候,会把1px的border计算在内,而mozilla没有;* 设定div的宽度后,如果给padding加一个值,IE会在宽度内减去这个值,而M ozilla会在宽度基础上加上这个值。

0 Comments

神奇的span和li同行两端对齐

要实现的效果如上图。css:#right_hr{border-top:#CCCCCC dashed 1px;width:290px;height:155px;margin:0 auto;}#right_hr li{margin-left:13px;line-height:25px;display:block;}#right_hr ul{padding:0;margin:0;width:260px;margin-top:10px;}.job{float:right;display:inline-block;}一般人理解的html应该是这样写:<div id=”right_hr”>          <ul>            <li>游戏项目经理 <span class=”job”>招聘人数:1人</span></li>            <li>原画师、游戏美工 <span class=”job”>招聘人数:2人</span></li>            <li>网页游戏程序 <span class=”job”>招聘人数:3人</span></li>            <li>动画师<span class=”job”>招聘人数:4人</span></li>          </ul></div>但如果你这样写,在IE中是无法实现最终效果的,FF中可以,IE里的效果如下图:你的html这样写才能在IE和FF中实现相同效果:<div id=”right_hr”>          <ul>            <li><span class=”job”>招聘人数:1人</span>游戏项目经理 </li>            <li><span class=”job”>招聘人数:2人</span>原画师、游戏美工 </li>            <li><span class=”job”>招聘人数:3人</span>网页游戏程序 </li>            <li><span class=”job”>招聘人数:4人</span>动画师</li>          </ul></div>对,放在后面的招聘人数在代码里实际上在前面,原因我也不是很清楚,望高人指点。。:)

2 Comments