`
truemylife
  • 浏览: 230901 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

web打印技术选型的烦恼与折衷方案

阅读更多

 


一、 讨论范围:

 

基于web网页、浏览器限于IE

 

二、  引子:

 

我们团队在做项目的过程中,碰到不同情况的打印需求;我这里把打印需求分成四种。

1)、复杂的报表打印,需要做套打。

2)、最简单的网页内容打印。

3)、简单设置后的网页内容打印。

4)、简单设置后(包括横向、纵向)自动设置后的网页内容打印。

之所以把34分开,是因为这两者研究的过程中两者看似小的差别,但技术实现上还是有不一样的地方,我们团队在项目过程中刚好碰到了第4种需求,进行一翻技术研究后,发觉第4种需求技术解决方案着实让人烦恼。但是再进一步在用户体验的角度来看,第4种和第3种虽说都能实现,但体验差不多一样糟糕。因此最终的折衷方案适合于第3、4种需求。

                   这里先对前两种需求的技术选型做出简单说明,然后再进一步讨论第3、4种需求及我们的折衷方案。

        

1)复杂的报表打印,需要做套打

开发ActiveX控件;或者使用开源;或者购买商用控件。我们团队使用的是自己开发的ActiveX控件。

2)最简单的网页内容打印

使用IE自带的打印,或者简单的使用js调用

Webbrowser

 

三、 展开讨论--web页面设置

 

ie浏览器->打印->页面设置界面,可以看到有以下元素可以设置:

1)纸张大小

2)纵向/横向

3)打印背景颜色和图像

4)启用缩小字体填充

5)页眉

6)页脚

7)左边距

8)右边距

9)上边距

10)下边距

11)字体大小

在设置并保存后,退出ie后,再次进入界面会发现纵向/横向和纸张大小这两个保存会丢掉,其他的都能保存住上次设置的状态。或许因为纵向/横向和纸张大小在打印设置那里还可以设置,所以这个值就没有被存入注册表。来看一下注册表

HKEY_CURRENT_USER/SOFTWARE/Microsoft/Internet Explorer/PageSetup,可以看到以下键值(中文作者加上)

font(字体大小)

footer(页脚)

header(页眉)

margin_bottom(下边距)

margin_left(左边距)

margin_right(右边距)

margin_top(下边距)

Print_Background(打印背景颜色和图像)

Shrink_To_Fit(启用缩小字体填充)

通过页面设置和注册表对比,可以很清楚看到纸张大小和纵向/横向不被存入注册表。因此就有了引子里讲到的第3和第4种需求的区别,第3种需求是指不设置纸张大小和纵向/横向设置。第4种需求则多了这两项。

 

四、如何修改页面设置注册表

 

基于第3种需求,主要是修改注册表,javascript代码如下:

 

<script type="text/javascript">
    var hkey_root,hkey_path,hkey_key  
    hkey_root="HKEY_CURRENT_USER";
    hkey_path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
      //这个是用来设置打印页眉页脚的,你可以设置为空或者其它
      try{  
            var RegWsh = new ActiveXObject("WScript.Shell");
             
            hkey_key="header";
            RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
           
            hkey_key="footer";
            RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
      }catch(e){
      alert(e.description);
      }
</script>
 

 

五、 如何修改页面设置纵向/横向及纸张大小

 

能否不通过第三方的activeX,直接利用javascript直接修改这两个属性呢?在网上折腾了两天后,只找到一种办法,还是使用WScript.Shell,代码例子如下

 

<script type="text/javascript">
                   try{
var RegWsh = new ActiveXObject("WScript.Shell");
RegWsh.sendKeys('%fu');//按下Alt+F+U键
RegWsh.sendKeys('%a');//按下了ALT+A键
RegWsh.sendKeys('{ENTER}');//按下Enter键
}catch(e){
      alert(e.description);
}
</script>
 

 

在执行时,可以看到有弹出页面设置的界面然后保存关闭的过程。

如果大家有其他体验更好的解决方案,希望能补充。

 

六、用户体验带来的烦恼

 

1、以上不管是哪种方案,都会提示用户安全上的确认,如果我们的ActiveX是通过官方认证的,相对来说安全级别是较高的,大部分用户是能接受的。

2、而第四、五点的实现在一般用户的安全设置情况下,会报出错误提示”automation服务器不能创建对象

客户端可以通过以下三种办法排查:

1)、如果是Scripting.FileSystemObject (FSO 文本文件读写)被关闭了, 开启FSO功能即可,在“运行”中执行regsvr32 scrrun.dll即可。

2)、安全模式设置成“中”,如果javascript脚本中报这个错误,还应将IE的安全设置“不允许运行未标记为安全的activeX控件”启用即可。注意如果您将相应的网站设成“受信任的站点”, 必须对“受信任的站点”进行相应的IE安全设置,此时如果对“InternetIE设置将是徒劳的。

3)、有些脚本需要微软的 MSXML 控件才能进入。当使用 IE 5 以上版本的缺省安全模式时,会提示是否接受 MSXML 控件, 如果接受,MSXML 将自动安装到您的机器上(得等上几分钟) 如果自动安装不成功,可以自行下载和安装 MSXML 3.0 SP7。有时是由于msxml 3服务被关掉了,使用regsvr32 msxml3.dll即可。

但是这样的体验无疑是用户无法忍受的,除非你的系统是后台内部少数人使用的场景,即便客户端的设置不弹出错误提示”automation服务器不能创建对象,但第五点的实现会看到打开页面时,自动弹出页面设置窗口并自动关闭的过程,我想这样的体验也是用户所厌恶的。

 

七、令人不爽的折衷方案

 

         讲了这么多,可能还没讲清楚我到底想要个什么样的打印需求,再次描述:我们想要一个简单的页面打印,比如某个网页上有个打印按钮,然后点击打印,能自动设置好纸张大小、纵向/横向及其他页面设置元素,并直接打印出页面上某个对象(其他不打印的对象可以通过cssjs控制不被打印出来)。

     令人遗憾的是,通过以上的阐述,通过JavascriptWScript.Shell直接实现的方式,用户体验太差。放弃!

折衷方案一、降低需求标准,通过javascript调用Webbrowser弹出打印设置,让用户自行设置纵向/横向及其他设置后再打印。体验较差,我们在项目过程中,由于时间的原因,做为临时解决方案。

折衷方案二、采用ActiveX,一般第三方的打印控件比较大,而我们的第34种需求方案实际上非常简单,用不到一般商用的庞大复杂的报表功能,因此可以做个简单但够用的体积又很小的ActiveX控件是最好的解决方案。ActiveX控件,免不了客户端第一次打开时下载和信任确认问题,这是ActiveX都无法避免的问题,但这种方案完全满足了用户的需求,但ActiveX开发需要的时间多,正式签名等过程复杂。我们将在下个sprint中考虑采用ActiveX

 

八、发文目的

 

         因为花了我2天多时间,本想通过javascript来实现本文中简单的自动打印设置并打印(即本文所提到的第34种需求),结果引出了这一系列技术问题及用户体验问题,如果大家有更好的解决方案,请予以分享。如果有碰到我同样需求又需要做出技术选型的朋友,希望本文能让你有所参考少走弯路。

 

--董柏 于2011.11.15中午

 

1
1
分享到:
评论

相关推荐

    论文研究 - 折衷效应的研究回顾与展望

    作为上下文效应的模型,折衷效应指出,当将极端选项添加到选择集中时,原始选项将成为折衷选项并更具吸引力。 在对折衷效果相关文献进行系统综述的基础上,本文对折衷效果进行了总结和展望。 首先,本文介绍了折衷...

    一种基于分布式空时码的协作MIMO分集复用折衷新方案.pdf

    在通信工程领域,MIMO(多输入多输出)技术是一种广泛采用的技术,它通过在发射端和接收端分别使用多个天线来提高无线通信...这一研究有助于为下一代无线网络提供有效的通信技术方案,尤其是在多跳和分布式网络环境下。

    PHPWeb开发技术指南——pdf格式

    4.1.6 实际应用中的折衷方案 99 4.1.7 PHP的内嵌“会话”库 100 4.2 安全性考虑 106 4.2.1 不要信任Web 107 4.2.2 不要重新发明加密法 111 4.2.3 开发组需要资深人员 118 4.2.4 认证 118 4.3 为什么适用性很重要 120...

    android投屏到web

    在IT行业中,Android投屏到Web是一项常见的技术需求,它使得用户可以将手机屏幕内容实时地展示在网页上,广泛应用于远程协作、在线教学、游戏直播等领域。本篇将详细介绍如何实现这一功能。 首先,从标题和描述我们...

    基于折衷规划的汽车悬架摆臂多目标拓扑优化设计.pdf

    汽车悬架摆臂是汽车悬挂系统的重要组成部分,其主要功能是传递车辆在行驶过程中的力和力矩,同时保证车轮与车身之间的相对运动,从而影响汽车的操控稳定性和乘坐舒适性。在设计悬架摆臂时,通常需要考虑多个目标,...

    Native App与Web App移动应用发展.pdf

    Hybrid App(混合应用)作为一种折衷方案,结合了Native App和Web App的优点,既利用了Web技术的跨平台性,又可以调用部分设备API,提升性能。同时,Progressive Web App(渐进式Web应用)的概念提出,使得Web App...

    逻辑芯片选型指南

    2. **评估技术参数**:根据需求评估不同技术类型的优缺点,选择最适合的技术方案。 3. **比较具体产品**:基于选定的技术类型,进一步比较不同供应商的产品,注意查看产品的数据手册和技术文档。 4. **验证兼容性**...

    关于强大的web gis的资源文档

    Web GIS(Web Geographic Information System),即网络地理信息系统,是地理信息系统技术与互联网技术相结合的产物。GIS作为一种强大的数据管理工具,自20世纪60年代在加拿大和美国兴起后,随着计算机技术的迅猛...

    MIMO中分集复用的折衷技术

    此文章是关于MIMO分集复用折衷技术的介绍和研究,是一种新的技术。

    iFIX WEBSPACE单点登录

    iFIX WEBSPACE单点登录是一种简化用户登录过程的技术,它允许用户仅输入一次登录信息,即可访问iFIX WEBSPACE。这对于提升用户体验和操作效率非常有帮助。通常情况下,若没有单点登录机制,用户在访问WEBSPACE时可能...

    应用折衷型模糊决策模型优选项目管理模式

    此外,文章还详细描述了折衷型模糊决策模型的数学方法和步骤,包括建立备选方案集合、确定评判方案的属性集(或称指标集)、确定评价指标的权重以及属性指标的量化与转换。其中,属性指标的量化主要解决定性指标的...

    小程序音视频解决方案升级详情.docx

    而Electron SDK则作为折衷方案,结合Web开发的便捷性和Native SDK的强大功能。 **接入指南**: 接入微信小程序的音视频功能非常简单,只需参考官方文档,通过组件和提供的接口就能快速实现功能。对于桌面端,根据...

    Xilinx选型手册

    Avnet还利用其设计服务专家团队Avnet Design Services(ADS),为广泛的客户群体提供全面的设计服务,包括参考设计、设计折衷/可行性分析、测试/验证、物料清单优化、技术咨询、技术教育、元器件选择、全套交钥匙...

    数据库设计的折衷方法

    数据库设计是信息系统构建的核心环节,它涉及到数据的组织、存储和检索,对于系统的性能、可扩展性和数据一致性至关重要。...每个设计决策都需要根据项目的具体情况进行权衡,以实现最佳的数据库设计方案。

    拓展的折衷范式与中国企业实施跨国并购.pdf

    【拓展的折衷范式】是由英国经济学家邓宁教授提出的,是国际生产折衷理论(OLI范式)的延伸与发展。这一理论最初提出时,包括三个关键因素:企业拥有特定优势(O,Ownership),区位特定优势(L,Location),内部化...

    基于折衷型变权向量的直觉语言决策方法

    首先, 定义折衷型变权向量, 提出与之对应的状态变权向量; 其次, 研究利用马氏效用函数诱导出折衷型变权向量; 再次, 定义直觉语言变量运算法则和大小比较方法, 提出直觉语言信息变权加权平均算子和直觉语言信息变权...

Global site tag (gtag.js) - Google Analytics