【问题标题】:Build image location in Crystal Report from report location从报表位置在 Crystal Report 中构建图像位置
【发布时间】:2013-11-14 15:51:20
【问题描述】:

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

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

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!

【问题讨论】:

    标签: scripting crystal-reports


    【解决方案1】:

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

    【讨论】:

    • 我没有意识到 Crystal 有一个特殊的字段,但我没有看到任何方法可以将该信息放入图像对象的脚本中。我似乎无法从脚本界面引用特殊字段。
    • 我认为这是您必须在报告本身中执行的操作。您必须为其中只有“FileName”的文件位置创建一个公式(fileLocation)。这将为您提供报告的完整路径。正如我引用的帖子所述,插入图片。在格式编辑器的图片选项卡中,为图形位置添加一个公式,如下所示: if left({@fileLocation), "C:\") > 0 then ..... 你明白我的意思吗上车?
    • 我刚刚进一步调查,发现虽然我无法从字段资源管理器中引用特殊字段,但我可以引用您在评论中提到的内置 FileName function .这将提供我构建图像路径所需的信息,如您所建议的。谢谢!
    • 谢谢大家,很高兴能帮上忙!
    【解决方案2】:

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

    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);
              }
        }
    }
    

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

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

    【讨论】:

    • 我很乐意接受这个答案,但我特别需要在 rpt 文件/水晶报告脚本的范围内工作。
    • 我认为这可能不是一个选择。感谢您的跟进;我会把这个留给后代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多