水晶報表(CrystalReport)自訂紙張格式(custom Papersize)的實現

來源:互聯網
上載者:User
發布日期: 19/1/2006

作者:水如煙 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時

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.