【问题标题】:VB 6.0 Crystal Reports Export to PDFVB 6.0 Crystal Reports 导出为 PDF
【发布时间】:2013-08-05 15:33:16
【问题描述】:

我在将 Crystal Reports 文件报告为 PDF 格式时遇到问题。我在这里查看了有关该问题的所有其他问题,但似乎没有一个可以解决我的问题。

这是我的代码:

Public Sub ExportReportToPDF(ReportObject As CRAXDRT.Report, ByVal filename As String, ByVal ReportTitle As String)

Dim objExportOptions As CRAXDRT.ExportOptions

ReportObject.ReportTitle = ReportTitle

With ReportObject
    .EnableParameterPrompting = False
    .MorePrintEngineErrorMessages = True
End With

Set objExportOptions = ReportObject.ExportOptions

With objExportOptions
    .DestinationType = crEDTDiskFile
    .DiskFileName = filename
    '.FormatType = crEFTExcel80Tabular
    '.FormatType = crEFTCommaSeparatedValues
    '.FormatType = crEFTExcel80
    '.FormatType = crEFTHTML32Standard
    '.FormatType = crEFTHTML40
    .FormatType = crEFTPortableDocFormat
    '.FormatType = crEFTRichText
    '.FormatType = crEFTText
    '.FormatType = crEFTWordForWindows

End With

ReportObject.Export False

End Sub

现在,我将除 PDF 之外的其他选项留在那里只是为了显示它们,它们显然都被注释掉了,但是如果我尝试任何其他格式,它就可以很好地导出。唯一不导出的格式是 PDF。它给了我错误:

运行时错误“-2147190908 (80047784)”: 报告导出失败。

当我单击“调试”时,它会在 ReportObject.Export False 行上突出显示。

另一方面,如果我这样做是为了让用户选择选项,我可以选择 PDF,但它仍然给我同样的错误。感谢您的帮助。

(感谢 AVD 在这里找到的编码How to Export to a PDF file in Crystal Report?)。

编辑:查看 Phillipe 的回复后,我正在逐步执行我的代码,并注意到在将 crEFTPortableDocFormat 分配给 FormatType 后,它会自动将“UXFPDF.DLL”分配给 FormatDllName。也许这是我的问题,有谁知道如何解决这个问题?我尝试重命名 crxf_pdf.dll 和 u2fpdf.dll(我最初拥有的用于 8.0 的那个),但没有奏效。

编辑:另一个发现是,当我在 CRViewer91 中启用导出选项(正确显示报告)并尝试通过此方法将其导出为 pdf 时,它不会出错。但是,它保存了一个几乎已损坏且无法打开的文件。

编辑:更多研究。 CRViewer91 似乎无法成功导出任何格式。 RTF 和 TXT 返回空白文档,尝试打开时出现 RPT 错误。

编辑:我认为我的部分问题可能是我一直在使用 8.0 CRAXRT.DLL,而我真正需要的是 9.0。我找到了 9.0 的那个,现在如何让它使用这个而不是旧的?

【问题讨论】:

    标签: vb.net pdf crystal-reports export


    【解决方案1】:

    我不确定是什么导致了所有错误,但是,我基本上通过从头开始一个新项目并仅包含必要的参考和组件来修复它。我知道我遇到的一个问题(导致 TLV 错误)是 CR9 的 CRAXDRT.dll 位于 Windows\system32 目录中,即使它引用该 .dll,它也需要从 Program Files\Common 引用它Files\CrystalDecision... CR9 的所有其他 .dll 所在的目录。

    还有一个小的代码更改需要完成,这是用于将我的导出为 PDF 的最终代码。

    Public Sub ExportReportToPDF(ReportObject As CRAXDRT.Report, ByVal filename As String, ByVal ReportTitle As String)
    
        Dim FormatDLLName As String
    
        ReportObject.ReportTitle = ReportTitle
    
        With ReportObject
            .EnableParameterPrompting = False
            .MorePrintEngineErrorMessages = True
        End With
    
        With ReportObject.ExportOptions
            .DestinationType = crEDTDiskFile
            .DiskFileName = filename
            '.FormatType = crEFTExcel80Tabular
            '.FormatType = crEFTCommaSeparatedValues
            '.FormatType = crEFTExcel80
            '.FormatType = crEFTHTML32Standard
            '.FormatType = crEFTHTML40
            .FormatType = crEFTPortableDocFormat
            '.FormatType = crEFTRichText
            '.FormatType = crEFTText
            '.FormatType = crEFTWordForWindows
        End With
    
        ReportObject.Export False
    
    End Sub
    

    我将注释掉的 FormatTypes 留在那里,以供其他发现此代码有用的人使用。菲利普,如果您想以某种方式“回答”这个问题,我很乐意为您提供的所有帮助提供一些代表。我没有足够的代表来支持你的东西。

    感谢您的所有帮助。

    【讨论】:

    • 很高兴知道它有效!这绝对不是编码问题。 Crystal Reports(至少版本高达 10)在 dll 管理方面非常神秘。如果您计划在具有不同语言和区域设置的计算机上部署 Crystal Reports,请务必小心。
    【解决方案2】:

    我猜'filename'值不起作用,可能是因为该文件夹不存在/文件名无效,或者是因为您没有在该文件夹下创建文件的相应权限。

    您可以尝试使用一些基本参数(例如 'filename = "c:\test.pdf"')的代码吗?

    我最后的猜测:导出为pdf格式的可能性需要在crystal文件夹下有一个特定的dll文件(不需要注册但需要在这里)。你有 crxf_pdf.dll 文件吗?

    编辑:

    我的最后一个问题:你能从 Crystal GUI 导出 PDF 吗?

    如果有任何帮助,这里是必须与 VB 应用程序一起分发的水晶报告文件列表:导出功能似乎与 crxf_*.dll 文件相关联

    CRAnalyzer.dll
    craxdrt.dll
    crdb_ado.dll
    crdeploy.reg
    crheapalloc.dll
    crqe.dll
    crtowords_en.dll
    crtslv.dll
    crviewer.dll
    crxf_html.dll
    crxf_pdf.dll
    crxf_rtf.dll
    crxf_wordw.dll
    crxf_xls.dll
    cxlibw-1-6.dll
    dbghelp.dll
    exlate32.dll
    ExportModeller.dll
    GDIPLUS.DLL
    Implode.dll
    keycode.dll
    msvcrt.dll
    pageObjectModel.dll
    querybuilder.dll
    ReportRenderer.dll
    riched20.dll
    sscdlg.dll
    sscsdk80.dll
    u252000.dll
    u25dts.dll
    u25samp1.dll
    u2dapp.dll
    u2ddisk.dll
    u2dmapi.dll
    u2dpost.dll
    u2fcr.dll
    u2frdef.dll
    u2frec.dll
    u2fsepv.dll
    u2ftext.dll
    u2fxml.dll
    u2l2000.dll
    u2lcom.dll
    u2ldts.dll
    u2lexch.dll
    u2lfinra.dll
    ufmanager.dll
    usp10.dll
    webReporting.dll
    

    【讨论】:

    • 文件名只是一个变量。目前它使用 C:\Testing\ReportTest.pdf 作为该变量。就像我说的,所有其他的导出都很好,只是不是 pdf 的。
    • 你能在同一个文件夹中创建一个同名的文件吗?文件是否已经存在?这种情况下,文件是否在其他软件中打开,所以无法删除?这种错误通常与 I/O 问题有关。顺便说一句,我正在使用相同的代码将我的报告保存为 PDF 文件。
    • 是的,使用所有其他导出选项,我已经成功创建了 ReportTest.xls、xlsx、csv、rtf、txt 和 doc。 html 有点不同,但我也能够创建它们。我从来没有在运行程序时打开过任何报告,而且我可以用任何其他格式覆盖文件而不会出现问题。只是因为某种原因无法导出的 pdf 文件。
    • 哦,是的,我可以手动创建 ReportTest.pdf,而不是从程序中。
    • 是的,我有 crxf_pdf.dll,我必须单独 dl,但我已将它放在各种文件夹中试用:它当前位于:C:\Program Files\Crystal Decisions\Crystal Reports 9 C:\Documents and Settings\Administrator\Desktop\DansTest (项目文件夹) C:\WINDOWS\Crystal C:\WINDOWS\system32 认为就是这样,在各种不同的地方尝试它,因为它仍然没有工作。
    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2022-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多