Silverlight企业应用实战:SL 4.0 打印,让我拿什么说爱你?

Silverlight企业应用实战:SL 4.0 打印,让我拿什么说爱你?,第1张

概述目录: 一、基本原理 二、一些限制 三、打印,想说爱你却并不容易   一、基本原理   网上有很多关于SL 4.0的教程,其中不乏介绍SL 4.0一个重要的新特性(也是企业应用非常重要的特性)——打印。这里简单的讲解一下,会了的同学可以直接跳过这一部分。   实现打印主要使用PrintDocument类。 var document = new PrintDocument();   PrintDoc

目录:

一、基本原理

二、一些限制

三、打印,想说爱你却并不容易

 

一、基本原理

 

网上有很多关于SL 4.0的教程,其中不乏介绍SL 4.0一个重要的新特性(也是企业应用非常重要的特性)——打印。这里简单的讲解一下,会了的同学可以直接跳过这一部分。

 

实现打印主要使用Printdocument类。

var document = new Printdocument(); 

 

Printdocument类主要有1个关键事件,1个关键方法

document.PrintPage += new EventHandler(document_PrintPage);document.Print("Test document");PrintPage事件的用法如下:voID document_PrintPage(object sender,PrintPageEventArgs e){    e.PageVisual = new Rectangle() { Fill = new SolIDcolorBrush(colors.Blue) }; //要打印的UIElement    e.HasMorePages = false; //默认为false}


如果为多页打印,则需要将 e.HasMorePages = true

此时PrintPage事件将被多次触发,直到e.HasMorePages为false为止。

Printdocument类还有2个事件,分别是BeginPrint和EndPrint,分别在打印任务开始和结束时触发(无论多少页,各触发一次)。

 

二、一些限制

  

在实际使用过程中发现Printdocument类的使用有一些限制。

 

不能够通过创建两个实例的方式同时启动两个打印任务。 Printdocument.Print方法必须由用户触发。

 

以上两种错误的使用方法都会抛出SecurityException:对话框必须由用户启动。

 

Printdocument是通过调用COM组件实现打印的,类似于:SavefileDialog、OpenfileDialog等。请使用时注意使用场景的限制。

 

三、打印,想说爱你却并不容易

 

打印这一功能,我相信很多人和我们一样,盼星星盼月亮~终于盼到SL 4.0正式发布的日子。

 

我们也是立即马不停蹄的开发SE的新特性,并将打印列为了比较重要的一块儿。

 

经过我们团队的 @大贲 (ben,1声,女孩子哦,技术可不输你们~)辛勤努力,我们在SE中实现了打印和打印预览功能。 

打印预览:支持单页和多页预览、设置纸张类型、方向、显示页眉、页脚、显示打印人、显示打印时间等功能。

 

就在我们认为一切OK,只等SE 4.0上线就可以将该功能交付客户使用的时候,却惊讶的发现由Silverlight产生的打印文档竟然有123MB之巨!而且还是单页!

 

我们知道SL 4.0的打印是基于位图的,也知道位图肯定要比矢量图大,但是我们没有想到的是。。大的也太多了吧!!

 

(我们测试了一个分页为4页的文档,竟然有492MB之巨,直接的结果就是。。。打印机死掉了。。。)

 

============== 无奈的分割线 ==============

 

我们将该问题反馈给微软后,得到的答复如下:

 

根据我们的调查,发现这是因为Silverlight 4的打印功能是基于位图所致。假设打印对象的大小是:8.27 X 11.69 英寸,打印机的输出设置在600dpi,颜色设置为32位真彩色的话,那么Silverlight送到打印机的文件大小即为:8.27x11.69x600x600x4=139213872 Byte,约等于132MB,文件的size的确是很大,这是因为Silverlight 4打印功能是基于位图的而不是基于矢量图,所以在当前情况下,可能只能请您尽可能地把打印机的DPI设置的稍微低一点,来缩小打印文件的大小了。或者您可以选择打印网页,而不是直接打印XAML。

 

对于SL打印的改进,微软的回复如下:

 

根据我和产品组的确认结果,他们的确已经接到了很多类似的反馈,反映说由于打印功能是基于位图的,所以会造成很大的文件,他们将在设计下一代产品时,把基于矢量图的打印支持作为一个重要的候选特性进行考虑。非常抱歉现在给您带来的不便。同时我们非常感谢您的反馈,对如何改进Silverlight产品更贴近我们用户需求来说,这将是非常重要的和有价值的参考意见。

 

============== 最后总结的分割线 ==============

 

经过公司层面慎重讨论,我们不得不从SE 4.0版本中撤下SL 4.0原生打印支持这一特性。

 

作为软件服务提供商,我们不能要求我们的客户去做什么,我们只能将最简单、最好用的功能提供给客户。

 

向在这一特性上花费了时间和精力的同事们致敬,我也相信在这一过程中你们学到了很多东西。

 

至少,我们知道,SL 4.0之后我们还在盼着什么~

 

打印,SL 5.0再会!!!

总结

以上是内存溢出为你收集整理的Silverlight企业应用实战:SL 4.0 打印,让我拿什么说爱你?全部内容,希望文章能够帮你解决Silverlight企业应用实战:SL 4.0 打印,让我拿什么说爱你?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存