發布日期: 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時