0

我在将 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)”:无法导出报告。

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

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

(感谢 AVD 在这里找到的编码如何在 Crystal Report 中导出为 PDF 文件?)。

编辑:通过菲利普的回应后,我正在逐步检查我的代码,并注意到在将 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 的那个,现在我如何让它使用这个而不是旧的?

4

2 回答 2

2

我不确定是什么导致了所有错误,但是,我基本上通过从头开始一个新项目并仅包含必要的参考和组件来修复它。我知道我遇到的一个问题(导致 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 留在那里,以供其他发现此代码有用的人使用。菲利普,如果您想以某种方式“回答”这个问题,我很乐意为您提供的所有帮助提供一些代表。我没有足够的代表来支持你的东西。

无论哪种方式,感谢您的所有帮助。

于 2013-08-07T20:23:46.950 回答
1

我猜'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
于 2013-08-05T15:38:43.470 回答