VB6+水晶报表9使用EPSON LQ-635K打印A5纸张问题
我使用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 CrystalReport1
Private Sub Form_Load()
Dim reportName As String
Screen.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 = crLandscape
CRViewer91.ReportSource = oRpt
CRViewer91.ViewReport
Screen.MousePointer = vbDefault
End Sub
Private Sub Form_Resize()
CRViewer91.Top = 0
CRViewer91.Left = 0
CRViewer91.Height = ScaleHeight
CRViewer91.Width = ScaleWidth
End Sub
Private 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
--------------------编程问答-------------------- Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
oRpt.Database.SetDataSource rs '连接水晶报表和数据源
oRpt.ReadRecords
CrystalReport1.PaperSize = crPaperA5
CrystalReport1.PaperOrientation = crLandscape
输出和设置的根本是两个不同的对象实例! --------------------编程问答-------------------- Sorry,以上代码帖错了,实际上我这段代码是下面这样的:
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/ --------------------编程问答-------------------- 测试更换其他打印机打印也一样的结果,打印机设置都已经设置为A5横向,但是打印出来的还是和预览的不同,旋转了90度,变成打印机进纸要把A5纸竖着放进打印机才行。 --------------------编程问答-------------------- A)设计的报表中是否已经指定了纸张和横向?
如果是,不需要代码再设置了,直接输出试试。
B)将打印设置提到前面来,并且设计中将纸张设为默认或自动。
Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
oRpt.PaperSize = crPaperA5
oRpt.PaperOrientation = crLandscape
oRpt.Database.SetDataSource rs '连接水晶报表和数据源
oRpt.ReadRecords
--------------------编程问答-------------------- oRpt.Database.SetDataSource rs '连接水晶报表和数据源
oRpt.ReadRecords
以上是语句是连接数据源和读取recordset记录集,而纸张设置语句在它之前或在它之后应该没有什么关系才对。
我设计报表时就是指定纸张为A5横向的。
昨天摸索了老半天,总算将问题解决了。非常奇怪的是,我在打印服务设置里重新自定义了一个纸张类型,宽:210mm 高148mm,然后打印时打印机纸张选我自定义的纸张,打印方向选纵向,然后打印出来的结果就正确了。而实际上A5纸张默认纵向是148mmx210mm,横向是210mmx148mm,也就是说,只要人为把纸张设置旋转90度就可以了。不过这个使用A5纸张横向打印的打印原理还是搞不懂,按理说,选择打印机自带的A5纸张类型选横向应该是和我自定义的纸张类型选纵向在尺寸规格上是一样的才对,可是打印的结果就有很大的差别,真是被搞糊涂了! --------------------编程问答-------------------- 总结一下:PaperOrientation 属性不起作用。
就是说比较老的报表控件,它更改打印机纸张的方法,在新的操作系统上没有效果。
补充:VB , 数据库(包含打印,安装,报表)