从报表位置在水晶报表中生成图像位置



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

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

image: c:fileslogo.png
report: c:filesreportstype1myreport.rpt

或者像这样:

image: \filehostfileslogo.png
report: \filehost\filesreportstype1myreport.rpt

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

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

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

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

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

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 添加到报表中。

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

最新更新