只能详细说明一下我的程序的API,你最好自己查一下CrystalReport的开发文档资料在CrystalReport8.0的安装目录下有
 
以下方法必须用CrystalReport编辑生成文件而不使用CrystalReport对象
 
1)PEOpenEngine打开引擎
无参数,有返回值 =1成功=0失败
2)EOpenPrintJob设定打印文件
jobnum = PEOpenPrintJob(App.Path + "\ducu.rpt")
参数为字符串 传入你的.RPT文件的全路径,返回值 jobnum为工作队列号
3)PESelectPrinterEX选择打印机
参数为PEOpenPrintJob的返回值
有返回值 =1成功=0失败
result = PESelectPrinterEX(jobnum)
4)得到.RPT文件中使用到的TABLE表的数量
tablecount = PEGetNTables(jobnum)
参数为PEOpenPrintJob的返回值
返回值TABLE表的数量
5)PESetNthTableLogOnInfo设定ODBC名
用PEGetNthTableLogOnInfo得到PELogOnInfo结构体
result = PEGetNthTableLogOnInfo(jobnum, i, PELogOnInfo1)
参数1为PEOpenPrintJob的返回值
参数2为第几个TABLE表(0是第一个)
参数3为PELogOnInfo结构体,是传出参数,不必赋值
有返回值 =1成功=0失败
PELogOnInfo1.ServerName = "MDB" + Chr(0)
"MDB"是我作成的ODBC连接的名称
result = PESetNthTableLogOnInfo(jobnum, i, PELogOnInfo1, 1)
 参数1为PEOpenPrintJob的返回值 
参数2为第几个TABLE表(0是第一个)
参数3为PELogOnInfo结构体,从PEGetNthTableLogOnInfo得到
参数4忘了,好象传1就可以了
 
6)result = PESetMargins(jobnum, RepLeft, RepRight, RepTop, RepBottom)设定报表的Margin
 参数1为PEOpenPrintJob的返回值 
参数2为报表左顶点X轴的值
参数3为报表右下点X轴的值
参数4报表左顶点Y轴的值
参数5报表右下点Y轴的值
有返回值 =1成功=0失败
 
7)PESetFormula设定报表文件参数值
formulacount = PEGetNFormulas(jobnum)得到.RPT文件Formula的数量
 参数1为PEOpenPrintJob的返回值 
返回值为Formula的数量
        result = PEGetNthFormula(jobnum, FormulaN, nameHandle, nameLength, TextHandle, TextLength)
        参数1为PEOpenPrintJob的返回值,FormulaN是第几个Formula(0是第一个)其他是传出参数,不必赋值
        有返回值 =1成功=0失败
        formulaName = String$(nameLength, 0)
        result = crvbHandleToBStr(formulaName, nameHandle, nameLength)
        此时formulaName为.RPT文件第FormulaN个Formula的名称,有返回值 =1成功=0失败
        FormulaText="'"+"A"+"'"
        result = PESetFormula(jobnum, formulaName, FormulaText)将A传给名称为formulaName的Formula
         参数1为PEOpenPrintJob的返回值, 参数2为Formula的名称,参数3为Formula的值(字符)
        有返回值 =1成功=0失败
8)PEDiscardSavedData使报表文件重新取数据
result = PEDiscardSavedData(jobnum)
         参数1为PEOpenPrintJob的返回值, 有返回值 =1成功=0失败9)PEOutputToWindow报表文件以Window打开
result = PEOutputToWindow(jobnum, "貸出期限超過者一覧", CW_USEDEFAULT, _
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, _
    CW_USEDEFAULT + WS_BORDER + WS_SYSMENU + WS_VISIBLE + WS_MAXIMIZE, printhwnd)
参数1为PEOpenPrintJob的返回值,
参数2为WINDOW的标题,
参数3,4,5,6传就可以了
参数7为WINDOW的风格,
参数8为传出值,LONG型窗口句柄,
有返回值 =1成功=0失败Dim PEWOptions As PEWindowOptions
PEWOptions.StructSize = PE_SIZEOF_WINDOW_OPTIONS
PEWOptions.hasGroupTree = 0
PEWOptions.canDrillDown = 0
PEWOptions.hasNavigationControls = 1
PEWOptions.hasCancelButton = 0
PEWOptions.hasPrintButton = 1
PEWOptions.hasExportButton = 0
PEWOptions.hasZoomControl = 1
PEWOptions.hasCloseButton = 1
PEWOptions.hasProgressControls = 1
PEWOptions.hasSearchButton = 1
PEWOptions.hasPrintSetupButton = 1
PEWOptions.hasRefreshButton = 1
PEWOptions.showToolbarTips = 1
PEWOptions.showDocumentTips = 0
PEWOptions.hasLaunchButton = 0
result = PESetWindowOptions(jobnum, PEWOptions)设定预览窗口上的控件
其他与报表文件输出到打印机一样
PEOutputToPrinter报表文件输出到打印机
result = PEOutputToPrinter(jobnum, Printer.Copies)  
参数1为PEOpenPrintJob的返回值,参数2为印刷数量, 有返回值 =1成功=0失败
 
Dim PEPOptions As PEPrintOptions
PEPOptions.StructSize = PE_SIZEOF_PRINT_OPTIONS 
result = PEGetPrintOptions(jobnum, PEPOptions)
PEPOptions.StructSize = PE_SIZEOF_PRINT_OPTIONS
PEPOptions.nReportCopies = nReportCopies报表印刷数量
PEPOptions.StartPageN = StartPageN印刷开始页
PEPOptions.stopPageN = stopPageN印刷结束页PEPOptions.collation = PE_DEFAULTCOLLATION
result = PESetPrintOptions(jobnum, PEPOptions)设定打印式样
 
Dim PESOptions As PESectionOptions
Dim code As Integer
 
PESOptions.StructSize = PE_SIZEOF_SECTION_OPTIONS
PESOptions.Visible = PE_UNCHANGED
PESOptions.NewPageBefore = PE_UNCHANGED
 
If systotal2.Reg1.System.Other.Tokusoku = 0 Then
    PESOptions.NewPageAfter = 1
Else
    PESOptions.NewPageAfter = 0
End If
PESOptions.KeepTogether = PE_UNCHANGED
PESOptions.SuppressBlankSection = PE_UNCHANGED
PESOptions.ResetPageNAfter = PE_UNCHANGED
PESOptions.PrintAtBottomOfPage = PE_UNCHANGED
PESOptions.backgroundColor = PE_UNCHANGED_COLOR
PESOptions.underlaySection = PE_UNCHANGED
PESOptions.showArea = PE_UNCHANGED
PESOptions.freeFormPlacement = PE_UNCHANGED
PESOptions.reserveMinimumPageFooter = PE_UNCHANGED
code = PE_SECTION_CODE(PE_SECT_GROUP_FOOTER, 0, 0)
result = PESetSectionFormat(jobnum, 5000, PESOptions)设定REPORT式样 10)PEStartPrintJob打印报表
result = PEStartPrintJob(jobnum, True)
参数1为PEOpenPrintJob的返回值, 有返回值 =1成功=0失败11)PEClosePrintJob关闭打印文件
result = PEClosePrintJob(jobnum)
参数1为PEOpenPrintJob的返回值, 有返回值 =1成功=0失败12PECloseEngine关闭引擎
无参数,有返回值 =1成功=0失败