第一种方式:通过字节数组方式
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转的