我正在尝试构建一个VB6控制台应用程序,以自动将Crystal Reports导出为PDF格式 . 这需要在没有用户交互的情况下完成(没有“另存为”或“打印”对话框) . 我们的想法是替换使用Neevia DocCreator打印到PDF的现有应用程序,但要求用户与每个报告的“另存为”对话框进行交互 .
由于我们公司的情况,我受限于VB6和Crystal Reports 8.0 . 我无法购买任何其他软件或下载第三方开源软件,这是政策禁止的 .
在进行实际导出时我遇到了问题 . 在下面的代码中,使用示例报告进行测试,行“oXRpt.Export False”会抛出错误“Missing or out-of-date export DLL” . 我无法确定它指的是哪个dll . 项目中的Crystal Report导出参考指向C:\ Program Files \ Seagate Software \ Viewers \ ActiveXViewer \ sviewhlp.dll . 该dll存在于引用的目录中 .
有没有人成功地做过这个,或者有没有人知道哪个DLL可能是问题?我也可以接受在没有任何用户交互的情况下打印到PDF的解决方案(我们没有完整的Adobe Acrobat,这家公司不会购买它;不是我的决定,对不起) . 这是我的代码:
Sub Main()
Dim oXApp As CRAXDRT.Application
Dim oXRpt As CRAXDRT.Report
Dim oXOpt As CRAXDRT.ExportOptions
On Error GoTo ExportErr
Set oXApp = CreateObject("CrystalRuntime.Application")
Set oXRpt = oXApp.OpenReport(App.Path & "\C1910X.rpt") '"\C0562.rpt")
oXRpt.RecordSelectionFormula = "{REPORT_HEADER.ReportControlID} = " & 1985735
With oXRpt
.EnableParameterPrompting = False
.MorePrintEngineErrorMessages = True
End With
Set oXOpt = oXRpt.ExportOptions
With oXOpt
.DestinationType = crEDTDiskFile
.DiskFileName = App.Path & "\C1910X.pdf"
.FormatType = crEFTPortableDocFormat
End With
oXRpt.Export False 'throws missing or out-of-date dll error
ExportErr:
MsgBox Err.Number & ", " & Err.Description
End Sub
3 回答
以下是我在会计软件包中使用的有关Crystal Reports导出的支持文件列表 . 它是Inno-Setup脚本的一部分,但您应该能够从此列表中了解要查找的内容:
我想我记得它是如何完成的 . 创建表单并添加报表视图 . 您可以调用此表单,但不需要显示它 . 将报告分配给此实例并尝试导出为PDF .
您可以做的是将CR导出为PDF,然后使用 ShellExecute 进行打印 .
这是要导出为PDF的VB6代码:
然后你可以用它来打印PDF: