2013-11-14 155 views
1

我正在使用Crystal Reports生成报告定义* .rpt文件。我稍后使用我的应用程序中的这些定义文件创建报告。从报表位置构建Crystal Report中的图像位置

我有一个名为的徽标的特殊图像,位于我的应用程序的文件目录中。我想在我的水晶报告中引用此徽标。标志总是位于几个目录,从我的报告,但根目录和主机可安装之间变化,所以文件结构看起来是这样的:

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

或像这样:

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

水晶是否有办法在具有相对路径的公式中引用此图像? .rpt文件是否包含对它的文件位置的引用,我可以用它来构建这个图像?

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

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

回答

3

Crystal有一个专门用于文件路径和名称的字段。您可以使用它来找出报告文件的位置,并在需要时提取路径。然后你可以使用它来动态引用你的图像文件。这里有一个post以及一些分步说明。

+0

我没有意识到Crystal有一个专门的领域,但我没有看到任何方式将这些信息放到图像对象的脚本中。我似乎无法从脚本界面引用特殊字段。 – Dragonsdoom

+1

我认为这是你在报告中必须要做的事情。您必须为其中只包含“FileName”的文件位置创建公式(fileLocation)。这将为您提供报告的完整路径。正如我引用的帖子所述,插入一张图片。在格式编辑器的图片选项卡中添加图形位置的公式,如下所示:if left({@ fileLocation),“C:\”)> 0然后.....你明白我是什么在? –

+0

我只是进一步调查,发现虽然我不能从字段资源管理器引用特殊字段,但我可以引用您在注释中提到的内置FileName _function_。这将提供我需要的信息,以按照您的建议构建我的图像的路径。谢谢! – Dragonsdoom

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

对你来说最大的好处是图像位置是任意的..你只需要知道它在数据检索时,而不是在报告渲染时。

+0

我很乐意接受这个答案,但我特别需要在rpt文件/水晶报表脚本的范围内工作。 – Dragonsdoom

+1

我想它可能不是一个选项。感谢您跟进。我会在这里为了后代。 –