您的位置:首页 > 其它

水晶报表(CrystalReport)自定义纸张格式(custom Papersize)的实现

2007-01-30 13:34 513 查看
http://lzmtw.cnblogs.com/archive/2006/01/19/320338.html

作者:水如烟 http://lzmtw.cnblogs.com

摘要:本文提供一种方法实现水晶报表自定义纸张格式进行预览和打印。

关键词:水晶报表 自定义纸张格式 打印

注意
:本文及其中的代码示例均基于 Microsoft Visual Studio 2005版本。

发现真要动手写成文时,需要做的事还真不少。关键的是手头活紧,不能系统的写。看来还是先贴出关键代码吧,然后看时间来重组。
我现在做出来的对话框如图:



关键代码:


Option Strict Off






Public Shared Function DrawingPapersizeToCryPapersize()Function DrawingPapersizeToCryPapersize(ByVal PrinterName As String, ByVal Papersize As Drawing.Printing.PaperSize) As Integer


Dim mPapersize As Integer = 0 'defaultPapersize in Crystal


For Each p As Drawing.Printing.PaperSize In Printing.Papersizes(PrinterName)


If p.PaperName = Papersize.PaperName Then


mPapersize = p.RawKind


Exit For


End If


Next


Return mPapersize


End Function




Public Shared Function Papersizes()Function Papersizes(ByVal PrinterName As String) As Drawing.Printing.PaperSize()


Dim mPageSetting As New Drawing.Printing.PageSettings


mPageSetting.PrinterSettings.PrinterName = PrinterName


Dim mPapersizes(mPageSetting.PrinterSettings.PaperSizes.Count - 1) As Drawing.Printing.PaperSize


mPageSetting.PrinterSettings.PaperSizes.CopyTo(mPapersizes, 0)


Return mPapersizes


End Function




Public Shared Sub DocumentPrintOptionsToCryPrintOptions()Sub DocumentPrintOptionsToCryPrintOptions(ByVal printOptions As PrintOptions, ByVal cryPrintOptions As CrystalDecisions.CrystalReports.Engine.PrintOptions)


Try


With cryPrintOptions


.PrinterName = printOptions.PrinterName


If printOptions.Papersize.IsLandscape Then


.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape


Else


.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait


End If


.PaperSize = DocumentPapersizeToCryPapersize(printOptions.Papersize) '注意这里,它是Drawing.Printing.Papersize的RawKind值.必须Option Strict Off


.ApplyPageMargins(DocumentMarginsToCryMargins(printOptions.Margins))


End With


Catch ex As Exception




End Try




End Sub
时间关系,暂贴代码至此,以后再补充,包括对话框里的所有功能。

效果图一





效果图二





呵,上头的横纵向颠倒了。

写文章的时间没有了,过两天我将这部分的项目打包供各位下载试用改进.
写得还是比较粗陋,一个人写赶进度的味道很是不好受,BUG肯定多多.希望有心人改进后将结果返馈出来,供我参考,也供各位参考.

其中的一些细节问题没办法深研.比如纸张的增加修改.我略看了Drawing.Printing.PrinterSettings
按道理应该通过它可以实现纸张增删功能的,可是我现在不会.所以,只能是参考别的仁兄的办法,用API.

谢谢各位.
注:对话框中的Margins是临时设定的边距参数,并非是打印服务器中相应纸张格式的Margins.

CSDN相应贴子:
http://community.csdn.net/Expert/topic/4530/4530505.xml?temp=.9733698
http://community.csdn.net/Expert/topic/4520/4520403.xml?temp=.9242823

因为这个问题目前为止我没看到类似的解决方案,虽惭愧,我也发到首页来了.

代码下载(粗粗的)

频频更新界面,很是不好.时间哪,没法了.
纸张格式增删方面的代码,请参考

博客园 - 虫子的一天
http://wormday.cnblogs.com/archive/2005/12/22/302635.html

1月23日代码更新

1月24日10时更新



1月24日13时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐