我使用VB6+Crystal Report9设计一份A5报表,设计时打印机设置中已经设置为A5横向纸张(宽度>高度),无论设计还是预览都能正常显示A5横向类型(宽度>高度)。但是,当我将报表发送给打印机时,无论是否重新修改纸张设置成A5横向纸张(宽度>高度),打印机打印的时候就变成了和我设计的报表旋转了90度的样子,即“宽度<高度”。我在网上找了很久都没见到有用的答案,不知道有哪位高手可以分享一下经验吗?谢谢!我的报表调用程序如下:Option Explicit
Private oApp As New CRAXDRT.Application
Private oRpt As CRAXDRT.Report
'Dim Report As New CrystalReport1Private Sub Form_Load()Dim reportName As StringScreen.MousePointer = vbHourglass
reportName = "\LCHSH.rpt" '定义要引用的rpt文件
Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
oRpt.Database.SetDataSource rs '连接水晶报表和数据源
oRpt.ReadRecords
CrystalReport1.PaperSize = crPaperA5
CrystalReport1.PaperOrientation = crLandscapeCRViewer91.ReportSource = oRpt
CRViewer91.ViewReport
Screen.MousePointer = vbDefaultEnd SubPrivate Sub Form_Resize()
CRViewer91.Top = 0
CRViewer91.Left = 0
CRViewer91.Height = ScaleHeight
CRViewer91.Width = ScaleWidthEnd SubPrivate Sub Form_Unload(Cancel As Integer)
Set rs = Nothing
Set conn = Nothing
End
End Sub'捕获打印事件
Private Sub CRViewer91_PrintButtonClicked(UseDefault As Boolean)
'不使用默认设置
UseDefault = False
'进行打印机设置
oRpt.PrinterSetup Me.hWnd
'直接打印
oRpt.PrintOutEx True
End Sub
Private oApp As New CRAXDRT.Application
Private oRpt As CRAXDRT.Report
'Dim Report As New CrystalReport1Private Sub Form_Load()Dim reportName As StringScreen.MousePointer = vbHourglass
reportName = "\LCHSH.rpt" '定义要引用的rpt文件
Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
oRpt.Database.SetDataSource rs '连接水晶报表和数据源
oRpt.ReadRecords
CrystalReport1.PaperSize = crPaperA5
CrystalReport1.PaperOrientation = crLandscapeCRViewer91.ReportSource = oRpt
CRViewer91.ViewReport
Screen.MousePointer = vbDefaultEnd SubPrivate Sub Form_Resize()
CRViewer91.Top = 0
CRViewer91.Left = 0
CRViewer91.Height = ScaleHeight
CRViewer91.Width = ScaleWidthEnd SubPrivate Sub Form_Unload(Cancel As Integer)
Set rs = Nothing
Set conn = Nothing
End
End Sub'捕获打印事件
Private Sub CRViewer91_PrintButtonClicked(UseDefault As Boolean)
'不使用默认设置
UseDefault = False
'进行打印机设置
oRpt.PrinterSetup Me.hWnd
'直接打印
oRpt.PrintOutEx True
End Sub
oRpt.Database.SetDataSource rs '连接水晶报表和数据源
oRpt.ReadRecords
CrystalReport1.PaperSize = crPaperA5
CrystalReport1.PaperOrientation = crLandscape输出和设置的根本是两个不同的对象实例!
Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
oRpt.Database.SetDataSource rs '连接水晶报表和数据源
oRpt.ReadRecords
oRpt.PaperSize = crPaperA5
oRpt.PaperOrientation = crLandscape不过即使如此,打印出来的结果依然是和预览显示的旋转了90度。真是搞不懂!
可能是CR的问题,也可能是CR和printer的问题。
另外去图表区问问阿泰,
http://forum.csdn.net/SList/DotNETReport/
如果是,不需要代码再设置了,直接输出试试。B)将打印设置提到前面来,并且设计中将纸张设为默认或自动。
Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
oRpt.PaperSize = crPaperA5
oRpt.PaperOrientation = crLandscape
oRpt.Database.SetDataSource rs '连接水晶报表和数据源
oRpt.ReadRecords
oRpt.ReadRecords
以上是语句是连接数据源和读取recordset记录集,而纸张设置语句在它之前或在它之后应该没有什么关系才对。我设计报表时就是指定纸张为A5横向的。昨天摸索了老半天,总算将问题解决了。非常奇怪的是,我在打印服务设置里重新自定义了一个纸张类型,宽:210mm 高148mm,然后打印时打印机纸张选我自定义的纸张,打印方向选纵向,然后打印出来的结果就正确了。而实际上A5纸张默认纵向是148mmx210mm,横向是210mmx148mm,也就是说,只要人为把纸张设置旋转90度就可以了。不过这个使用A5纸张横向打印的打印原理还是搞不懂,按理说,选择打印机自带的A5纸张类型选横向应该是和我自定义的纸张类型选纵向在尺寸规格上是一样的才对,可是打印的结果就有很大的差别,真是被搞糊涂了!
就是说比较老的报表控件,它更改打印机纸张的方法,在新的操作系统上没有效果。