c# fastreport中图片显示总结

第一种方式:通过字节数组方式

Byte[] streamByte = SaveImage(@"C:\Users\jay\Desktop\sign.png");

report.SetParameterValue("signPath", Convert.ToBase64String(streamByte));

在fastreport中增加图片组件,在BeforePrint事件中写方法

string imgStr = (string)Report.GetParameterValue("signPath");
      byte[] imgData=Convert.FromBase64String(imgStr);
      MemoryStream ms = new MemoryStream(imgData);
      Image img = System.Drawing.Image.FromStream(ms);
      Picture1.Image=img;

上面是用的parameter传递的参数,也可以用datatable中的参数传递,只写下接收的方法

string imgStr = (string)Report.GetColumnValue("DataTable1.签名");

public byte[] SaveImage(String path)
        {
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); //将图片以文件流的形式进行保存
            BinaryReader br = new BinaryReader(fs);
            byte[] imgBytesIn = br.ReadBytes((int)fs.Length); //将流读入到字节数组中
            return imgBytesIn;
        }

第二种方式::通过路径方式 传递过来的C:\Users\jay\Desktop\sign.png 

//传递过来的签名为图片路径
      string imgStr = (string)Report.GetColumnValue("DataTable1.签名");
      Picture1.ImageLocation=imgStr;
      //改用param传参数,因为签名就一个数据没必要放在table里面
      string imgStr = (string)Report.GetParameterValue("signPath");
      Picture1.ImageLocation=imgStr;

上面的两种方式都经过测试,在网上找了很多方法大部分都是delphi的,关于c#的很少,主要用的是字节数组传递的方式。

另外在图片中设置数据列的方式也不行,已经设置为字节数组的类型了,而且传递过来的时候是没有经过base64转的
 

猜你喜欢

转载自blog.csdn.net/qq_33380252/article/details/86490030
今日推荐