摘要:本文提供一种方法实现水晶报表自定义纸张格式进行预览和打印。
关键词:水晶报表 自定义纸张格式 打印
注意:本文及其中的代码示例均基于 Microsoft Visual Studio 2005版本。
发现真要动手写成文时,需要做的事还真不少。关键的是手头活紧,不能系统的写。看来还是先贴出关键代码吧,然后看时间来重组。
我现在做出来的对话框如图:
关键代码:
Public Shared 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
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
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时更新