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


    作者:水如烟 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.

    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时更新



  • 相关阅读:
    触达项目涉及到的功能点
    NodeJS编程基础
    C#Socket通讯
    HTML转义字符大全
    C# 二进制,十进制,十六进制 互转
    浏览器的分类
    Prometheus设置systemctl管理
    第十五讲:Pagerduty的联用
    第十四讲:Prometheus 企业级实际使⽤二
    第十三讲:Prometheus 企业级实际使⽤
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/1516197.html
Copyright © 2020-2023  润新知