`
laorer
  • 浏览: 428739 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

<转>web打印

    博客分类:
  • j2EE
阅读更多

自从开发web程序以来,web打印就一直是困饶大家的大问题。基于web的打印,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制。下面就IE浏览器所能采用的打印解决方案,来个汇总分析。
一、 浏览器的打印功能菜单
这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:
1 不能精确分页。
浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。
2 不能准确地控制边距及打印文字。
3 不能解决连续打印。
比如,不是仅打印一张票据,而是连续一次打印若干个票据。
二、 使用webbrowser控件+ javascript
这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可以让用户不用去点菜单,直接在网页中的一个按钮,或一个链接里面调用罢了。
三、 使用print css
这是一种最理想的实现web套打的方法。这种方法通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不需要下载任何插件,而且跨平台性非常好。print css推出已经有些时日,但遗憾的是,至今没有一个厂商的浏览器很好地实现了这些标准,这使得程序员目前还不能利用print css进行实际的开发。关于打印css,参见:
http://css-discuss.incutio.com/?page=PrintStylesheets
四、 使用pdf文件
用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,然后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但需要下载adobe插件。这是国外报表工具经常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。
五、 采用纯ActiveX
这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好,但缺点也是很明显的,嵌入ActiveX控件破坏了web应用的整体html风格,且这样的控件比较大(一般超过1M,下载颇费时间)。
六、 采用Applet方式
采用Applet方式,分页或精确打印,都可以做到完美,但缺点也很明显,表现在:
1安装Applet成本巨大。需要下载十几M的文件。
Applet本身可能并不大,但运行Applet所需的jre一般至少10几M(jre1.4.2 , 15.45M)。用户需要极大的耐心,来进行打印。
2打印报表时,需要重新向服务器检索数据,效率低。
因为Applet方案,一般采用html方式呈现数据,打印时Applet必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,Applet根本不会用当前html页的数据来打印,而是向服务器下载数据到Applet中来打印。也就是说,打印的话,必须两次请求,一次html呈现,一次用来打印。
 
七、 轻量级的ActiveX打印方式
轻量级的ActiveX打印方案的优点是:
1. 效率高;
可以直接打印指定的html文档,不必向后台再次提起请求。
2. 能做到精确打印,分页;
3. 功能丰富,
可以利用该控件,实现对当前票据文档的打印,预览,及多个html文档的连续打印。
4. 下载量小, ActiveX只有75K。

e表就是采用第七种方式来实现报表的打印。e表内置了一个用c++写的轻量级的ActiveX控件来精确地控制客户端的打印机。一举解决web打印问题。
详见: http://www.fcsoft.com.cn

--

http://community.csdn.net/Expert/topic/5380/5380531.xml?temp=.4599268

分享到:
评论

相关推荐

    C#编程经验技巧宝典

    4&lt;br&gt;&lt;br&gt;0008 为程序设置版本和帮助信息 4&lt;br&gt;&lt;br&gt;0009 设置Windows应用程序启动窗体 5&lt;br&gt;&lt;br&gt;0010 设置Web应用程序起始页 5&lt;br&gt;&lt;br&gt;0011 如何设置程序的出错窗口 5&lt;br&gt;&lt;br&gt;0012 如何进行程序调试 6&lt;br&gt;...

    C#源码大集合 01(共3卷)

    │ ├─第25讲 自己做个浏览器&lt;br&gt;│ │ └─第26讲 发送Email&lt;br&gt;│ ├─第04部分 图形图象&lt;br&gt;│ │ ├─第27讲 一个时钟的实例&lt;br&gt;│ │ ├─第28讲 玩转三维空间&lt;br&gt;│ │ ├─第30讲 绘制液晶显示的数字&lt;br&gt;│...

    C#源码大集合 03(共3卷)

    │ ├─第25讲 自己做个浏览器&lt;br&gt;│ │ └─第26讲 发送Email&lt;br&gt;│ ├─第04部分 图形图象&lt;br&gt;│ │ ├─第27讲 一个时钟的实例&lt;br&gt;│ │ ├─第28讲 玩转三维空间&lt;br&gt;│ │ ├─第30讲 绘制液晶显示的数字&lt;br&gt;│...

    Linux管理员指南

    比较 3&lt;br&gt;1.3.2 GUI图形界面与操作系统内核的彼&lt;br&gt; 此相对独立 4&lt;br&gt;1.3.3 Windows中的“网络邻居”概念 5&lt;br&gt;1.3.4 Windows中的注册表文件与文本文&lt;br&gt; 件的比较 6&lt;br&gt;1.3.5 域的概念 6&lt;br&gt;1.4 小结 7&lt;br&gt;第2章 ...

    LINUX与UNIX_SHELL编程指南2

    176&lt;br&gt;&lt;br&gt;18.4.3 提示键入y或n 177&lt;br&gt;&lt;br&gt;18.4.4 case与命令参数传递 ...&lt;br&gt;18.5.2 打印字符串列表 181&lt;br&gt;&lt;br&gt;18.5.3 对for循环使用ls命令 181&lt;br&gt;&lt;br&gt;18.5.4 对for循环使用参数 182&lt;br&gt;&lt;br&gt;18.5.5 使用for循环...

    C#.net_经典编程例子400个

    第1章 窗体与界面设计 1&lt;br&gt;1.1 菜单应用实例 2&lt;br&gt;实例001 带历史信息的菜单 2&lt;br&gt;实例002 菜单动态合并 3&lt;br&gt;实例003 像开始菜单一样漂亮的菜单 4&lt;br&gt;实例004 任务栏托盘菜单 5&lt;br&gt;实例005 可以拉伸...

    java应用软件程序设计

    ReadTestquestion&lt;br&gt;7.5. 课程设计作业&lt;br&gt;第8章 日历记事本&lt;br&gt;8.1. 设计内容&lt;br&gt;8.2. 设计要求&lt;br&gt;8.3. 总体设计&lt;br&gt;8.4. 具体设计&lt;br&gt;8.4.1. 运行效果与程序发布&lt;br&gt;8.4.2. 主类CalendarPad&lt;br&gt;8.4.3. 记事本...

    LINUX与UNIX SHELL编程指南

    sed 用法介绍 89&lt;br&gt;10.1 sed怎样读取数据 89&lt;br&gt;10.2 调用sed 89&lt;br&gt;...&lt;br&gt;10.4.2 打印范围 91&lt;br&gt;10.4.3 打印模式 92&lt;br&gt;10.4.4 使用模式和行号进行查询 92&lt;br&gt;10.4.5 匹配元字符 92&lt;br&gt;10.4.6 显示整个文件 92...

    powerbuilder案例开发集锦(源码光盘)1

    报表打印&lt;br&gt; 案例1 报表打印预览&lt;br&gt; 案例2 报表的打印&lt;br&gt; 案例3 数据窗口的预览和打印实现 &lt;br&gt; 案例4 使用混合编程实现打印控制 &lt;br&gt; 案例5 使用PowerPrinter动态链接库实现打印扩展 &lt;br&gt; 案例6 数据窗口的打印 ...

    c#基础实例

    实例3 人民币大写转换案例&lt;br&gt; 实例4 模拟俄罗斯方块游戏&lt;br&gt; 实例5 模拟联五子游戏&lt;br&gt; 第四章 系统文件处理&lt;br&gt; 实例1 文件资源管理器&lt;br&gt; 实例2 模拟IE浏览器&lt;br&gt; 实例3 一个具有查找打印功能的文本编译器&lt;br&gt;&lt;br...

    《Visual.C#.编程精彩百例》配套光盘part1

    &lt;br&gt;实例13 垃圾收集器算法控制与使用 &lt;br&gt;实例14 调用栈记录异常点 &lt;br&gt;实例15 使用C#异常的栈跟踪 &lt;br&gt;实例16 运行期间检测变量类型 &lt;br&gt;实例17 常用值类型的原型定义 &lt;br&gt;实例18 打印杨辉三角形 &lt;br&gt;实例19 比较...

    《Visual.C#.编程精彩百例》配套光盘.part2

    &lt;br&gt;实例13 垃圾收集器算法控制与使用 &lt;br&gt;实例14 调用栈记录异常点 &lt;br&gt;实例15 使用C#异常的栈跟踪 &lt;br&gt;实例16 运行期间检测变量类型 &lt;br&gt;实例17 常用值类型的原型定义 &lt;br&gt;实例18 打印杨辉三角形 &lt;br&gt;实例19 比较...

    DotNetTextBox所见即所得编辑器控件 v3.3.1

    &lt;br&gt;&lt;br&gt;2007/6/1&lt;br&gt;Version 3.0.9 beta&lt;br&gt;&lt;br&gt;Updates:&lt;br&gt;1) web.config中新增configfolder、functionfolder、skin三个必须目录的全局路径设置,以往旧版本如果要在不同级别子目录的页面调用控件都要单独设置...

    ATGrid报表控件 wintable报表设计器

    &lt;br&gt; 普通报表,套打报表,财务报表,分组报表,主从报表,交叉报表,多行显示,自定义等WEB报表; &lt;br&gt;&lt;br&gt;wintable报表设计器&lt;br&gt;------------------------------------&lt;br&gt;·界面类似于Excel软件,会Excel就会WinTable...

    水木清华站∶Java版精华区 含jsp及js等集合.chm

    Java版精华区 &lt;br&gt;含java jsp及js等精华帖子合集&lt;br&gt;适合收藏 查询&lt;br&gt;&lt;br&gt;序号 精华区主题 &lt;br&gt;--------------------------------&lt;br&gt; 1. [目录]Java教程 &lt;br&gt; 1. [目录]Java语言教程 &lt;br&gt; 2. [目录]来自java的传说...

    销售送货管理软件

    &lt;br&gt;使用本系统的好处:&lt;br&gt;(1) 公司从此可以告别手工开单,打印整齐漂亮的单据,这关系到公司的形象,也关系到公司的内部管理。&lt;br&gt;(2) 可以随时检查自己的经营情况,一切相关的查询和统计可以在瞬间完成。&lt;br&gt;...

    Adobe Photoshop CS2 Classroom in a Book

    &lt;br&gt;Adobe Photoshop CS2 Classroom in a Book &lt;br&gt;&lt;br&gt;By Adobe Creative Team &lt;br&gt; &lt;br&gt;Publisher: Adobe Press &lt;br&gt;Pub Date: May 24, 2005 &lt;br&gt;ISBN: 0-321-32184-7 &lt;br&gt;Pages: 496 &lt;br&gt; &lt;br&gt;Photoshop is one ...

    Image Optimization SDK控件

    &lt;br&gt; Image Optimization SDK控件 允许定制和在你的软件中使用我们产品Web Image Guru的功能。&lt;br&gt;&lt;br&gt; Image Optimization SDK控件 限制一台机器只能由一个开发者使用,为了创建基于客户的软件而不是为了多线程的...

Global site tag (gtag.js) - Google Analytics