只有碰到刁难的客户,有挑战性的项目和过于会算计的老板才能锻造出真正过硬的开发人员!
公司接了一个类POS机收费项目,这本是CS结构的强项,丰富的组建表现能力和完善成熟的票据打印解决方案。可是无良+无知的老板,偏以要求基于目前公司现有的B/S结构系统为基点,置于那些票据打印什么的屌问题,在Web结构下如何实现?那都是你们开发人员的事情,我只要求,以最少的投入,换来最大的产出~
牢骚发完,还是说说这个让我头疼的套打票据的问题的处理如何解决处理的吧~Web模式的票据套打功能的实现,从我个人来说没有什么技术上的贡献,不过就是不断那各种各样的基于Web的打印组件,依次尝试,依次淘汰,从中选出最为适合自己的而已。
用户要求:
1、要求无打印机提示,同时实现及时录入、及时打印功能。
2、用户已经预先定制了一批148mm * 92mm的套打票据。
3、支持键盘快捷键打印。
XScript :
我首先选择目前市面上比较流行的XScript打印组件,该软件的免费版本能够满足用户及录及印要求。但该软件存在几个问题是让我最终放弃的原因:1、该软件为国外软件,购买版权,不知如何下手?而且价格极其高昂;2、XScript是以打印页面某一部分区域(通过CSS进行屏蔽)的方式实现打印功能,对于套打类需求的票据来说,需要通过DIV+CSS的方式进行定位,因此调试票据费时费事;3、用户的票据高度仅为92mm,不只是Epson打印机的Bug还是其他原因,当我设定自定义格式票据(120mm*90mm)时,打印机已无法识别此尺度票据,完全无法满足用户要求(付费版本提供自定义票据大小功能,个人没有试用,不知是否可行),这也是我最终放弃该组件的根本原因。
Lodop5.0
Lodop5是我使用的第二款基于Web打印组件,也是个人最为满意的一款打印组件。
1、该软件的免费版本就支持票据的格式自定义功能,大大解决困扰我多时的票据格式问题。不过是在票据后面打印一行(您所使用Lodop控件为免费版本)。付费版本价格也十分低廉,对于真正好的软件,花一些银两对于我来说还是十分认可的。
SET_PRINT_PAGESIZE(Horizon/Vertical ,Width,Height,"");
2、该软件支持非常棒的套打功能,将票据扫描后,使用Lodop提供的票据编辑器进行编辑,一张票据的制作时间大大缩短。
LODOP.PRINT_DESIGN();
3、Lodop提供了除支持烂IE外,还可以在Firefox等浏览器上使用,极大的方便了,目前浏览器使用多样性的的现状。
关于Lodop的几个常见疑问
Lodop新官方站点: http://www.MountTaiSoftware.com
感谢远宏信息科技 提供的网络空间和域名,该空间不限制流量,
欢迎大家访问,最新版本会第一时间在那里发布。
当该服务器不能访问时,请用另外一个克隆站点:http://MTSoftware.v053.gokao.net/index.html
Lodop的在线样例见:http://www.MountTaisoftware.com/samples/PrintSampIndex.html
如何购买打印控件Lodop的注册号
Lodop注册价格有两种:
一是按服务器IP或域名注册,注册费为160元/每个IP和域名;
二是按公司名注册,不限制IP或域名,注册费706元;
具体购买付款途径如下:
第一种方式:从天空商城购买,网店地址如下:
1、按公司名注册(价格706元): http://shareware.skycn.com/soft/20744.htm
2、按域名注册(价格160元): http://shareware.skycn.com/soft/28596.htm
可以请求邮寄发票,付款方式较多。
第二种方式,通过淘宝网购买,这种方式是担保交易,先抵押款、收到注册号后再确认付款。
1、价格是706元的链接
http://item.taobao.com/auction/item_detail-0db2-ed4f523cedca5e3cd648db066bf6d36e.jhtml
2、价格是160元的链接:
http://item.taobao.com/auction/item_detail-0db2-11cbfa99893bd9bbcccd6da4d0cdeecc.jhtml
第三种方式:联系作者直接购买:
作者联系方式QQ932131686,电子邮箱 [email protected]
两种价格都适合,可立即获得注册号,用支付宝付款,
网页打印插件Lodop1.0完整教程
一、概述
网页插件Lodop是一款专业的WEB打印控件,它源自软件解决方案提供商在B/S框架项目中的自主研发。插件从1.0版就非常稳定,但正由 于其出身缘故,插件的应用比较适合如下情况:
●开发B/S架构项目,有很多打印功能要做
●用户相对固定但打印机类型繁杂
●有“套打票据”等精打业务,又不想多费精力
●有些内容和格式已在网页中,不想另做打印页面
●不想为打印问题多投资,打印不是开发重点
●希望找一个简单实用而且专业的打印方案
二、安装或升级
Lodop的安装是它的彩头之一,由于浏览器的安全设置问题,一般插件的安装颇费脑筋,成功率大都很低。但Lodop的安装却做到了安全、简单和实用。在 Lodop的发布文件包中,只有一个关键安装文件install_lodop.exe,仅仅运行这个600K的小文件(IE系的浏览器不需要其它附加文 件)就可以成功安装。开发环境和最终用户的安装都可采用这个方式。如果将该文件改名为uninstall_lodop.exe(在原文件名前加un),就 变成卸载文件(靠!太节省了),而重复执行(新)安装文件就是升级。
Lodop安装后,在系统目录 WINDOWS\system32下会安装一个ocx文件 CAOSOFT_WEB_PRINT_lodop.ocx,有特殊需要的使用者完全可以将该文件签名,用传统的OCX安装方式发布。
细心的读者可能会发现,这种安装方式带来一个问题,就是软件新版本的升级判断(任何成熟的程序都存在升级可能),针对这个问题,Lodop的应对措施也比 较特别,在发布文件包中有一个安装和升级的样例JS文件CheckActivX.js,其内容如下:
function CheckLodop(){
var oldVersion=LODOP.Version;
newVerion="1.0.1.0";
if (oldVersion==null){
document.write("
插件Lodop未安装!请点击这里执行安装
");
if (navigator.appName=="Netscape")
document.write("
(Firefox浏览器先点击这里安装运行环境)
");
} else if (oldVersion
document.write("
当前插件版本需要升级!点击这里执行升级
");
}
其中的关键点是LODOP.Version,可以看出Lodop提供了一个“读版本号”函数,这样版本的升级问题就全部交给JS来实现了(JS处理起这个 来就小菜了),以下是插件在页面内的调用代码,其中包含CheckLodop 的利用 :
ID="LODOP" CLASSID="clsid:2105C259-1E0C-4534-8141-A753534CB4CA"
WIDTH=100 HEIGHT=28>
CheckLodop();
以上两段代码相互配合实现了Lodop的安装、调用和升级。之所以将CheckActivX.js作为一个资源文件来部署,既可以利用浏览器的缓存减少页 面内容的重复下载量,毕竟多数应用是动态页面,同时还实现了插件发布统一管理,整个项目中只要有这一个地方发布Lodop。其它页面仅仅拷贝嵌入第2段代 码就OK了!
三、插件参数和插件函数
Lodop的参数和函数并不多,但足够强大,这也是使用者喜欢它的原因之一。
(在这个小段落有两个概念“插件参数”和“函数参数”,注 意它俩的区别)
1:插件参数:
Lodop原设计的参数较多,但最常用的只有这几个:Caption、Border、Version、CompanyName、RegID 等五个。如果不希望在页面中显示插件,可以设置插件的WIDTH和HEIGHT全为0,假如要显示,那显示的插件名称就由参数Caption来设置,正如 样例中的“打印准备好”,可以从界面看清插件是否运行正常。
参数Border可以设置插件的外观是否有边框线(感觉没有边框线更融入页面),这个参数用处不大,之所以介绍它是因为其参数值的类型很具代表性,在 Lodop的参数和函数中,逻辑值全部采用0(否false)和1(是true),所以Border的Value等于1就表示要加边框线了。
如下是插件参数含义表:
插件参数名 |
含义 |
Caption |
插件显示名 |
Border |
逻辑值:0-无边框线,1-有边框线 |
Version |
版本号 |
CompanyName |
(注册用)用户名简称,要求少于8个汉字或16个字符 |
RegID |
(注册用)注册号,由版权人根据用户名简称提供,20个数字组成 |
注册号可以将试用版直接变为正式版,试用版与正式版的区别是在打印输出时会含有“试用版”字样,功能并没有限制。
2、插件函数:
Lodop控制输出布局,是利用函数来实现的。Lodop每个功能函数的参数比较多,但并不显繁琐和冗余,反而在实际应用中发现比用插件参数方式要灵活和 快速。
Lodop的最初设计不仅仅是打印功能,所以功能函数很多,以下是打印类函数清单:
SET_PRINT_PAPER(intTop,intLeft,intWidth,intHeight,strPrintName);
ADD_PRINT_TEXT(intTop,intLeft,intWidth,intHeight,strContent);
SET_PRINT_TEXT_STYLE(intItemNO,strFontName,ineSize,intBold,intItalic,intUnderline,intAlignment );
ADD_PRINT_HTML(intTop,intLeft,intWidth,intHeight,strContent);
PRINT_SETUP;
PREVIEW;
PRINT;
插件函数的功能及参数含义:
函数名 |
函数参数 |
功能含义 |
SET_PRINT_PAPER |
intTop, intLeft, intWidth, intHeight, strPrintName |
功能:设置打印纸张; 参数分别设置纸张的上边距、左边距、宽、高及打印业务名; |
ADD_PRINT_TEXT |
intTop, intLeft, intWidth, intHeight, strContent |
功能:增加一条文本打印项 参数分别设置文本在纸张内的上边距、左边距、宽、高及文本内容。 |
SET_PRINT_TEXT_STYLE |
intItemNO, strFontName, ineSize, intBold, intItalic,intUnderline, intAlignment |
功能:设置该文本项样式,无该函数则取缺省样式。IntItemNO是文本项序号,以ADD_PRINT_TEXT的先后顺序为准,从1开始。 strFontName是字体名,intAlignment左右靠齐方式 ,一般调试用。其它参数分别设置文 本内容项的字体大小、是否粗体、是否斜体和有否下划线。 |
ADD_PRINT_HTML |
intTop, intLeft, intWidth, intHeight, strContent |
功能:增加一项超文本打印区域。参数设置该区域在纸张内的上边距、左边距、宽、高及超文本获取语句(一般用innerHTML) |
PRINT_SETUP |
|
打印设置(自定布局) |
PREVIEW |
|
打印预览,无参数 |
|
|
直接打印,无参数 |
其中函数参数 strPrintName 需要特别注意, Lodop 控制的打印业务, 其布局可以在不同的使用者电脑上自行调整,调整结果保存在本地,保存时就按参数 strPrintName 指定值来起名的,所以 strPrintName 值不能重复(感觉这是 lodop 的一个软筋)!!至少在一个项目工程中不能出现重复。建议其赋值原则为:“工程简称”+“打印业务名称” + 版本序号。譬如“湖北省地税征管系统完税证套打”可以起名为: HBZGXT_WanShuiZhengTaoDa01
四、自定布局
Lodop的自定布局功能是它的彩头之一。由于控制打印输出布局实在是件辛苦的事,而套打业务更是辛苦之极,如果程序面临的打印机类型繁杂,则是苦上加 苦!Lodop的设计者把这个苦差使给担了(非常感谢!)。
自定布局也叫打印维护(当然其中包含传统意义上的打印维护,譬如选择纸张类型、打印方向等),是用插件函数PRINT_SETUP来启动的,如下是其JS 调用代码:
function prn_manage() {
AddTwoForm();
LODOP.PRINT_SETUP();
};
function AddTwoForm(){
LODOP.SET_PRINT_PAPER(10,10,800,600,"WDCSXT_TwoFormOutTest01");
LODOP.ADD_PRINT_HTML(10,20,350,380,document.forms.form1.innerHTML);
LODOP.ADD_PRINT_HTML(10,400,400,280,document.forms.form2.innerHTML);
LODOP.ADD_PRINT_TEXT(350,200,500,50,"以上演示两个网页Form被并排打印!!");
LODOP.SET_PRINT_TEXT_STYLE(3,"黑体",11,1,1,1,1);
};