首页 文章

无需用户交互即可从Crystal Reports 8.0导出到VB6中的PDF

提问于
浏览
0

我正在尝试构建一个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 回答

  • 0

    以下是我在会计软件包中使用的有关Crystal Reports导出的支持文件列表 . 它是Inno-Setup脚本的一部分,但您应该能够从此列表中了解要查找的内容:

    ; begin Export Destinations
    Source: C:\WINDOWS\Crystal\u2d*.dll; DestDir: {pf32}\Seagate Software\SI\X86; Flags: sharedfile
    Source: C:\WINDOWS\Crystal\u2d*.dll; DestDir: {win}\Crystal; Flags: sharedfile
    ; end Export Destinations
    
    ; begin Export Formats
    Source: C:\WINDOWS\Crystal\u2f*.dll; DestDir: {pf32}\Seagate Software\SI\X86; Flags: sharedfile
    Source: C:\WINDOWS\Crystal\u2f*.dll; DestDir: {win}\Crystal; Flags: sharedfile
    Source: C:\WINDOWS\Crystal\crxf_*.dll; DestDir: {pf32}\Seagate Software\SI\X86; Flags: sharedfile
    Source: C:\WINDOWS\Crystal\crxf_*.dll; DestDir: {win}\Crystal; Flags: sharedfile
    ; end Export Formats
    
    ; begin Page Ranged Export
    Source: C:\Program Files (x86)\Seagate Software\Shared\ExportModeller.dll; DestDir: {pf32}\Seagate Software\Shared; Flags: sharedfile regserver
    Source: C:\Program Files (x86)\Seagate Software\Shared\crtslv.dll; DestDir: {pf32}\Seagate Software\Shared; Flags: sharedfile regserver
    Source: C:\Program Files (x86)\Common Files\Crystal Decisions\2.0\bin\ExportModeller.dll; DestDir: {pf32}\Common Files\Crystal Decisions\2.0\Bin; Flags: sharedfile regserver
    Source: C:\Program Files (x86)\Common Files\Crystal Decisions\2.0\bin\crtslv.dll; DestDir: {pf32}\Common Files\Crystal Decisions\2.0\Bin; Flags: sharedfile regserver
    ; end Page Ranged Export
    
  • 1

    我想我记得它是如何完成的 . 创建表单并添加报表视图 . 您可以调用此表单,但不需要显示它 . 将报告分配给此实例并尝试导出为PDF .

  • 0

    您可以做的是将CR导出为PDF,然后使用 ShellExecute 进行打印 .

    这是要导出为PDF的VB6代码:

    Dim crxApplication As New CRAXDRT.Application
    Dim Report as Object
    Set Report = crxApplication.OpenReport("c:\temp\reportname.rpt")
    With Report.ExportOptions
        .DestinationType = crEDTDiskFile
        .FormatType = crEFTPortableDocFormat
        .PDFExportAllPages = True
        .DiskFileName = "c:\temp\pdfname.pdf"
    End With
    

    然后你可以用它来打印PDF:

    pid = ShellExecute(0&, "print", "c:\temp\pdfname.pdf", vbNullString, vbNullString, vbNormalFocus)
    

相关问题