有心栽花花不开,无心插柳柳成荫

人生不易,自得其乐
posts - 14, comments - 29, trackbacks - 0, articles - 0

最近做的一个B/S项目,在打印时采用了在IE中嵌入.net winform控件和XML结合的方式(参见http://www.yesky.com/20030214/1652186.shtml),在实际应用过程中,有一些心得,和大家分享。

一.使用通用模版格式化XML文件
系统中共用到了三种单据,分别为出库单,入库单,送货单,因此,定义三个模版文件,以出库单为例,格式如下:

chukudan.xsl:

 


解释一下:其中,toptable是表头,detailtable是表格左边的产品明细,mastertable是表格右边的运输信息等,foottable是最下面制表人等信息。

(二).在asp.net页面中,将查询出的结果作如下转换 

          '是否取得了单据
            If billInfoXml <> Nothing Then

                billInfoDoc.LoadXml(billInfoXml)
                
'billInfoDoc.LoadXml("http://111.111.111.111/stockmg/test.xsl")
                billTrans.Load(billFormatXmlUrl)

                billXmlWr.Formatting 
= System.Xml.Formatting.Indented
                billXmlWr.Indentation 
= 4
                billXmlWr.IndentChar 
= " "

                billTrans.Transform(billNav, 
Nothing, billXmlWr, Nothing)
                billXmlWr.Flush()

            
End If


三.返回的信息用javascript代码加载到打印控件:

 parent.frames.frmhidPrint.parent.frames.frmhidPrint.print1.SetXml(xmlResult); parent.frames.frmhidPrint.parent.frames.frmhidPrint.print1.PrintAct();

注意,这里调用打印控件用了parent.frames....这是为了节省每次打开页面时加载打印控件的时间,使用了一个框架网页,把打印控件放在一个单独的页面中,从而不需每次加载。

四.打印纸张大小的控制
开始采用的是在打印控件中读取上面的XML文件设定的纸张大小,总是没有反应,后来发现,对于打印机的纸张大小控制,程序并不是总是有效的。可靠的方法是在打印机的纸张类型中添加本系统需要的纸张类型,程序中直接调用这个纸张,使用中没有再出现问题。

希望和各位多多交流,不吝指正。

效果如下:

   

Feedback

#1楼    回复  引用  查看    

2006-03-23 16:42 by dudu      
发表在新手区吧.

#2楼 [楼主]   回复  引用  查看    

2006-03-29 09:07 by 薛冰      
看得人很多,没讲话的就没意思了。

#3楼    回复  引用    

2006-04-18 00:03 by william_88 [未注册用户]
麻烦问一下。这种方法,客户端也要装 .net framework 呀是吗?

#4楼 [楼主]   回复  引用  查看    

2006-04-18 08:58 by 薛冰      
是的。客户端需要安装.net framework。好像可以做一个安装文件,把.net framework的安装和安全级别调整做在一起。

#5楼    回复  引用    

2006-12-20 00:14 by yifan[匿名] [未注册用户]
我在打印中遇到很多问题,尤其是在调用那个DLL控件的时候,能不能把你调用的这一段代码共享给我一下``
yzmsc@163.com
谢谢!

#6楼 [楼主]   回复  引用  查看    

2007-01-05 21:53 by 薛冰      
可以,但我现在手边可能没有,找到了再发给你

#7楼    回复  引用    

2007-01-30 22:10 by leiyang [未注册用户]

我利用了,卢彦的web打印的方法,可是无法利用ASP.NET来调用,能否把你写的一项相关代码共享给我一下?
ygeneral@126.com
谢谢

#8楼    回复  引用    

2007-05-11 13:31 by 22 [未注册用户]
222

#9楼    回复  引用    

2007-10-24 09:53 by 林森 [未注册用户]
IBM提供XML生产型打印支持

  新华网消息,IBM公司近日宣布推出用于 OS/390 和 z/OS 的PSF(Print Service Facility) V3.3 软件,该软件可以直接从 XML (可扩展标记语言, 应用程序集成的一种新兴数据格式) 应用程序中启动高速生产型打印机的打印操作,而且还能保证输出的精度、打印的完整性并具有财务统计功能。这是生产型打印市场上第一个具有此类功能的解决方案,专为满足客户打印 XML格式数据的需要而设计。

  自 IBM 1984年率先推出AFP (Advanced Function Presentation) 以来,它已经成为了集中式和分布式环境下高级功能、系统管理打印的实际行业标准。今天,电子商务的发展提出了这样的要求:为了简化企业内部或企业之间的业务流程,希望通过 Web 启动现有的AFP应用程序,而该程序常常使用XML格式以优化应用集成。

  对此IBM 公司打印系统部企业打印业务主管 Rich Troksa 说:“除了打印之外,我们的客户现在还希望利用 Web ,通过访问企业门户网站获取基于AFP 的信息,或者将基于AFP 的信息直接以电子输出的形式在互联网上传递。XML 是在此扩展过程中的一项关键技术。IBM的PSF V3.3 生产型打印软件对XML的支持,将进一步延长我们的客户在AFP 上投资的有效期。”

  打印 XML数据的传统方法,是利用XSL(Extensible Stylesheet Language) 格式化语言将 XML 数据转换成格式化对象,然后再将格式化对象转换成某种打印机语言,如PostScript 或者 PCL 等。由于打印时数据准备的步骤太多,特别是在生产型打印环境中,需要打印诸如大量的账单、发票、银行结帐单以及销售保单等单据时,打印数据的准备过程就更长,因此这种转换方法速度慢,效率低。

  PSF V3.3的推出使它成为当前业界唯一一个基于 OS/390 、用于驱动 AFP页面打印机的软件,它完全支持众多经销商提供的AFP/IPDS(智能打印机数据流)打印机。其主要优点如下:

  降低打印总成本,提高工作效率

  用于 OS/390和z/OS 的 PSF V3.3 可以降低企业打印总成本,因为它降低了以下成本:

  o 打印应用维护

  o 打印机工作

  o 预打印产品库存、订购以及报废情况表格

  o 分布式环境中未得到充分利用的台式打印机

  o 因差错、人工干预或路由不正确而导致的作业重打

  另外,IBM 公司的 PSF V3.3 还支持在AFP页面定义中的一种新式页面版式,它允许用户为 XML 数据指定格式,这样就缩短了第一页开始打印的时间,从而提高了工作效率。在 PSF 利用一种 XML 页面版式处理 XML 数据文件的过程中,它就将输出直接转换成 IPDS,以便能在生产型高速 AFP 打印机上进行打印。

  Troksa 先生总结说:“由于 PSF 增加了对 XML的打印支持,这样就有助于我们的 OS/390 和 z/OS 客户将他们的应用程序及业务流程在合作伙伴、供应商和客户之间实现整合。它是客户电子商务输出基础设施中的又一个关键构件。” (完)



标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-12-08 16:41 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: