从报表位置在Crystal Report中构建图像位置

时间:2013-11-14 15:51:21

标签: scripting crystal-reports

我正在使用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!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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添加到报表中。

最大的优势在于图像位置是任意的......您只需要在数据检索时知道它,而不是在报告渲染时知道它。