0

我有一个 Crystal Report,我正在尝试使用报表查看器通过网站运行,并且还(使用相同的 .rpt)通过后台进程运行,该进程将使用导出选项将报表直接生成到流或文件中。

我没有使用数据库,而是创建了一个 xml 模式文件,并正在生成一个 xml 数据文件,以根据唯一的用户数据加载到报告中。

当我创建报告时,我建立了一个 ADO.NET(XML) 连接来设计它并将它指向我的模式文件(全部在 VS 2012 中)。

在运行时,我使用 .net DataSet 对象并使用 ReadXmlSchema 和 ReadXml 方法来获取我的报表数据,然后设置我的 ReportDocument 对象的数据源。

这一切都在我使用 Report Viewer 的 Web 应用程序中运行良好。这是工作代码:

    ReportDocument report = new ReportDocument();
    report.Load(reportPath);

    DataSet reportData = new DataSet();

    reportData.ReadXmlSchema("MySchema.xml");
    reportData.ReadXml("SampleData1.xml");

    report.SetDataSource(reportData);

    CrystalReportViewer1.ReportSource = report;

我的问题/问题是如何在没有报告查看器的情况下以编程方式运行它并让它生成 PDF?基本上与上面相同的代码减去报表查看器部分并添加一个导出选项。我有一个长期运行的后台进程,并希望将此报告作为 PDF 附加到我生成的电子邮件中。

我可以使用与 Web 版本相同的方法,但是当我到达 SetDataSource 行并尝试将其设置为我的 DataSet 时,我收到错误消息“未知数据库连接错误...”,这与不使用SetDatabaseLogon 方法。

当我没有连接到数据库时,我试图了解 Crystal Reports 对 SetDatabaseLogon 方法的期望。如果它假定我在 .RPT 文件中的原始 ADO.NET(XML) 连接是合法的数据库连接,那么登录参数是什么?这只是一个文件。没有用户名、密码等。

有没有更好的方法可以在没有报表查看器的情况下从现有的 Crystal Report 直接转换为 PDF?我查看了各种链接,但没有发现不涉及某种连接字符串的内容。如果我必须使用 SetDatabaseLogin,仅使用 XML 文件时哪些值有效?

感谢您提供任何信息或链接!

编辑:在查看“未知数据库连接器错误”(不是我之前所说的连接)时,我发现它实际上是在查看我的 Temp 文件夹中的 .RPT,而不是在我认为从中加载它的远程位置。也许这就是问题所在?

4

3 回答 3

1

你有没有尝试过这样的事情:

Report.ExportToDisk(ExportFormatType.PortableDocFormat, Server.MapPath("Foldername/Reportname.pdf"));
于 2013-10-09T15:55:33.547 回答
0

试试这个代码:

                report.ExportOptions.DestinationType = CRExportDestinationType.crEDTDiskFile;
                report.ExportOptions.FormatType = CRExportFormatType.crEFTPortableDocFormat;
                DiskFileDestinationOptions fileOption = new DiskFileDestinationOptions();
                fileOption.DiskFileName = "Test.pdf";
                report.ExportOptions.DiskFileName = fileOption.DiskFileName;
                report.Export(false);
于 2013-10-12T13:48:34.640 回答
0

你可以试试这个:

PageMargins margins = new PageMargins { topMargin = 100, leftMargin = 250, bottomMargin = 100, rightMargin = 100 };
report.PrintOptions.ApplyPageMargins(margins );
Stream str = report.ExportToStream(ExportFormatType.PortableDocFormat);
int length = Convert.ToInt32(str.Length);
byte[] bytes = new byte[length];
str.Read(bytes, 0, length);
str.Close();
File.WriteAllBytes(@"C:\Report.pdf", bytes);

我希望它有所帮助。

于 2014-03-14T13:46:05.380 回答