1

我正在使用 Crystal Reports 生成报告定义*.rpt文件。稍后,我使用应用程序内部的这些定义文件创建报告。

我有一个特殊的图像,称为徽标,位于我的应用程序的文件目录中。我想在我的水晶报告中引用这个标志。徽标始终位于我的报告上方的几个目录中,但根目录和主机可以在安装之间更改,因此文件结构可能如下所示:

image: c:\files\logo.png
report: c:\files\reports\type1\myreport.rpt

或像这样:

image: \\filehost\files\logo.png
report: \\filehost\\files\reports\type1\myreport.rpt

Crystal 是否有办法在具有相对路径的公式中引用此图像?.rpt 文件是否包含对其文件位置的引用,我可以利用它来获取此图像?

编辑: @campagnolo_1 提到 Crystal 有一个“文件路径和名称”特殊字段,但我看不到在图像文件位置脚本中使用它的方法。

编辑 2: @campagnolo_1 在他的回答的评论中提供了一个解决方案。谢谢campagnolo_1!

4

2 回答 2

3

Crystal 有一个用于文件路径和名称的特殊字段。您可以使用它来找出报告文件的位置并在需要时提取路径。然后您可以使用它来动态引用您的图像文件。这是一个包含一些分步说明的帖子。

于 2013-11-14T16:01:54.507 回答
1

我总是将我的徽标作为报表绑定的基础数据的一部分流式传输。我通过执行以下操作将列添加到数据集:

DataTable dt = GetYourDataTable();
dt.Columns.Add(new DataColumn("imagepath", typeof(string)));
dt.Columns.Add(new DataColumn("image", typeof(System.Byte[])));             
ds.Tables.Add(dt);

并填充它:

using (FileStream fs = new FileStream(szFilePath, FileMode.Open))
{
    using (BinaryReader br = new BinaryReader(fs))
    {
          foreach (DataRow dr in _dtReportData.Rows)
          {
               dr["imagepath"] = szFilePath;
               dr["image"] = br.ReadBytes((int)br.BaseStream.Length);
          }
    }
}

我知道设置每一行是多余的,但它确实有效,并且可以将对象作为 Blob 添加到报告中。

对您来说最大的优势是图像位置是任意的。您只需要在数据检索时知道它,而不是在报告呈现时。

于 2013-11-14T16:01:42.963 回答