惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 永红

东莞依时利诚聘java与.net方面的英才 项目管理笔记(观念) 项目管理笔记(概述) 【置顶】DLPrinter WEB打印组件第2次更新 也谈WEB打印(五):在IE的打印预览窗口中定义自己的用户接口 也谈WEB打印(四):让我们的模板支持打印,并根据内容动态的生成页面 也谈WEB打印(三):抛开IE,实现我们自己的打印模板 也谈WEB打印(二):简单的分析一下IE的打印原理并实现简单的打印和预览 整理的几个常用的数据库维护的脚本 揭秘SQL Server 2000中的Bookmark Lookup 用MSIL剥开C#的外衣(一):方法参数ref、out、params和lock、for和foreach关键字 【翻译】MSIL 教程(三):类和异常处理 【翻译】MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API 【翻译】MSIL 教程(一) 设计模式实战:用Prototype模式提高系统的开发效率,用DynamicMethod、Flyweight模式提高系统的运行效率 用DynamicMethod提升ORM系统转换业务数据的性能 设计模式实战:在WinForm中用Command模式实现可以撤销的数据操作 把Sql数据转换为业务数据的几种方法 设计模式实战:组合型模式Composite,Adapter
也谈WEB打印(-):目前的几种方式及我们的任务
永红 · 2007-10-08 · via 博客园 - 永红

     B/S平台下的MIS软件,打印是不可缺少的功能,好的报表输出,能让你的产品在用户的心中增加不少的分量。但是打印模块所花的时间也是非常的多的。其实现方式有如下几种:

1、使用Crystal Report等通用报表组件来完成。

   优点:功能强大,对于CS/BS都可以通用,Crystal Report等甚至与还有Report Service等功能,对于业务流程非常复杂的大项目应该是很适合的了。这种项目人手充足,时间充足,资金也充足,老板也重视。(这是个人猜测,因为我没做过大项目^_^)。

  缺点:工作量大,对每一个报表都需要设计模板,这个需要花费不少的时间和精力。我们这种小项目,流程不复杂,Report Service等功能用不上,也不用CS/BS通用,也许将来某个时候需要需要在C/S下用,但还不知道那是什么时候。就是需要控制页边距、纸张大小等,然后把当前界面或者某个报表(很少的情况)打印出来就可以了。另外,我们因为项目小,所以项目成员也少,也就5~6个人,项目的开发周期也短,也就2~3个月,如果还需要抽出人手来专门做报表模板,还真有点紧张。看着兄弟们加班加点,还真不忍心再加大工作量。还有一个最要命的是,这些东西真的贵。资金本来就少,还需要买这些服务,一谈起这个事情,老板总是摇头。

2、使用IE自带的打印功能,加上CSS的支持。

   优点:不用专人花时间来写打印模板,节省时间,也不要另外花钱,老板很高兴。似乎是一个好的方案。

缺点:功能太弱小了。不能控制页边距、纸张大小等,更不用说不打印当前界面而是打印另外一个报表了。这样,客户就不高兴了,干嘛非得每次让我自己设置页边距、设置纸张大小、设置页眉页脚等,或者是有些报表根本就没有提供。

3、使用meadroid等提供的免费客户端打印组件。

   优点:同2

   缺点:meadroid的这个东西很好,可惜只能使用半年。半年之后你必须重新下载,并更改该组件的GUID,真麻烦。如果用户这个时候正好需要打印,那真是臭大了。而且,如果你想避免这种情况的发生,那就请交钱吧,即使是1年的费用好像也不便宜。这样的话,我们似乎又回到了第一个解决方案。当然还有许多其他公司提供的免费组件,但是性质和meadroid公司提供的都差不多,费用有便宜的,也有贵的,总的说来,老板都总是摇头。

4、使用服务器端生成PDF等文件的方式。

    优点:现在生成PDF文件的免费组件很多,不用另外花钱。效果也很好。

缺点:学习困难。代码量也非常大。而且,对于我们这种需求多变的小项目,一旦客户的要求变了,那么就必须相应的更改代码。维护的代价真的高。

看了这么几种方案,都不适合我们使用。还是毛主席老人家讲得好,“自己动手,丰衣足食”,看来得自己动手写一个IE客户端打印组件了,他实现如下功能:

1、 可以用js控制页边距、纸张大小、页眉页脚、横向纵向等。

2、 可以用js控制打印内容。

找了几天的资料,终于找到了2篇好文:《Beyond Print Preview: Print Customization for Internet Explorer 5.5、《Print Preview 2: The Continuing Adventures of Internet Explorer 5.5 Print Customization》。看了半天,终于摸出了一点头绪,在那个Sample的基础上改了改,做了个ActiveX,现供朋友们使用。可以用js控制页边距,设置当前打印的URL,至于纸张大小,页眉页脚等功能,容我实现后再提供给朋友们使用。至于源码,因涉及公司机密,所以……请朋友们见谅。

使用方法:

1、首先在被打印页面中包含如下语句:

<OBJECT ID="DLPrinter" CLASSID="CLSID:5C230622-45E5-4e3c-893C-3BFDDC4DB5E4" height="0" width="0" codebase="DLPrinter.CAB" ></OBJECT>

2、打印预览:<input type="button" id="btnPrint" value="Print Preview" onclick="DLPrinter.PrintPreview()" />

3、设置页边距:

 DLPrinter.MarginLeft=20; //这是毫米制的

 DLPrinter.MarginRight=20;

 DLPrinter.MarginTop=20;

 DLPrinter.MarginBottom=20;

4、不打印当前页面而是另外一个页面:

DLPrinter.ContentURL="http://www.cnblogs.com/Yahong111/archive/2007/09/19/898326.html";

在后续的文章中,我会讲述是如何实现这些功能的。欢迎拍砖。
    DLPrinter.CAB.rar,大家把扩展名.rar去掉即可(因为不能上传.cab文件,所以把DLPrinter.cab改成了DLPrinter.cab.rar)。