做过FastReport打印图片的请进

22222bbb 2012-07-26 10:27:03
图片存在数据库中,BMP和JPG格式都有,但是数据集中有些记录是空的,没有图图,打印时却显示了别人的照片,我写的代码如下:
procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent);
var MS1,MS2:TMemoryStream;
i:integer;
C:byte;
ImageType,sFileName:String;
begin
try
MS1:=TMemoryStream.Create;
MS2:=TMemoryStream.Create;
TBlobField(self.Qry_Data.FieldByName('C1101')).SaveToStream(MS1);
MS1.Position:=0;
MS1.Seek(0,0);

if MS1.Size<=0 then exit;
ImageType := '';
for i := 0 to 3 do
begin
MS1.Read(C, 1);
ImageType := ImageType + Char(C);
end;

ImageType := Trim(ImageType);
if pos('JJJ',ImageType)>0 then ImageType:='JPG';

MS2.Clear;
for I := 0 to MS1.Size - 3 do
begin
MS1.Read(C, 1);
MS2.Write(C, 1);
end;
//将图片流保存到临时文件中
MS2.Seek(0, 0);
sFileName:=sFileName+'.'+ImageType;
MS2.SaveToFile(sFileName);

if (Sender is TfrxPictureView) then
(Sender as TfrxPictureView).Picture.LoadFromFile(sFileName);
//这里总是会载入,

finally
if Assigned(MS1) then
MS1.Free;
if Assigned(MS2) then
MS2.Free;
end;
end;
...全文
437 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
22222bbb 2012-07-26
  • 打赏
  • 举报
回复
在预览时主数据是没有变的,我用 if Self.Qry_data.fieldbyName('image').isnull then这样判断是没用的,如果能判断 frxDBDataSet的字段值就可以解决这个问题了,但不知道如何写
22222bbb 2012-07-26
  • 打赏
  • 举报
回复
直接连数据库不写代码好像只能是BMP格式的图片吧,我设了image的field和dataSet没用
我这样写也不会造成每张一样,只是如果没有图片的人会显示前一个人的照片。。。。。郁闷啊
grjs2004 2012-07-26
  • 打赏
  • 举报
回复
直接连接数据库就行了!
要不就在预览报表时就刷新一下!
rgn 2012-07-26
  • 打赏
  • 举报
回复
我用fastreport直接连接数据库显示图片的,不写代码的没问题
kaikai_kk 2012-07-26
  • 打赏
  • 举报
回复
每一笔数据都要设置,不然后面的值会和前面的一样

加上判断,值为空的时候,图片也清空
rgn 2012-07-26
  • 打赏
  • 举报
回复
直接边数据库,什么混合的格式都能显示啊,包括空的,也自动不显示的,我用的是4.9版

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧