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

    技术2022-05-11  85

    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(ByVal PrinterName As StringByVal 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(ByVal PrinterName As StringAs Drawing.Printing.PaperSize()            Dim mPageSetting As New Drawing.Printing.PageSettings            mPageSetting.PrinterSettings.PrinterName = PrinterName            Dim mPapersizes(mPageSetting.PrinterSettings.PaperSizes.Count - 1As Drawing.Printing.PaperSize            mPageSetting.PrinterSettings.PaperSizes.CopyTo(mPapersizes, 0)            Return mPapersizes        End Function

     

             Public   Shared   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.相应贴子:http://community.csdn.net/Expert/topic/4530/4530505.xml?temp=.9733698http://community.csdn.net/Expert/topic/4520/4520403.xml?temp=.9242823因为这个问题目前为止我没看到类似的解决方案,虽惭愧,我也发到首页来了.代码下载(粗粗的)频频更新界面,很是不好.时间哪,没法了.纸张格式增删方面的代码,请参考博客园 - 虫子的一天http://wormday.cnblogs.com/archive/2005/12/22/302635.html1月23日代码更新1月24日10时更新1月24日13时


    最新回复(0)