我正在使用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!
答案 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添加到报表中。
最大的优势在于图像位置是任意的......您只需要在数据检索时知道它,而不是在报告渲染时知道它。