QuickRep+QRImage 图片打印,高分相送!

78hgdong 2006-07-10 03:54:52
因特殊图片打印要求,用了query1+DBGrid1+QuickRep1+QRImage 这几个控件来实现:

1.图片存储在D:\Pictuer 文件夹,图片名称存储在数据库表 TPicture.

2.在QuickRep1上放了20个QRImage来显示20张图片,也就是在一页A4纸上打印20张图片.

3.已经查询要打印图片的名称到query1,并且显示了图片的名称在DBGrid1,
根据每次打印图片数量的不同,有时1-150左右不等.假如要打印98张图片,
怎样从query1读取图片名称和加载对应的D:\Pictuer 文件夹的图片
到QuickRep1上显示,当打印完第一页图片后,接着打印第二页,以此类推...

各位有什么好的实现方法??? 高分相送
...全文
584 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
78hgdong 2006-07-29
  • 打赏
  • 举报
回复
参考以上几位的方法,我采用了另外一种方法已经解决,谢谢参与!
XXSingle 2006-07-11
  • 打赏
  • 举报
回复
用madbo(风轻扬{十年磨一剑}) 的方法已经实现楼主需要的了,至少打几张、打哪一张纯属于另外一回事,可以通过查询图片名称或者其它方法解决
wudi_1982 2006-07-11
  • 打赏
  • 举报
回复
不明白LZ究竟是觉得那个地方不好弄,如果没有特殊需要,那就直接把图片读取到窗体上,然后打印窗体,打印完了,再读取。这样的话,你想怎么分页都可以。
madbo 2006-07-10
  • 打赏
  • 举报
回复
其实你现在给我的感觉就是钻牛角尖了.思路转不过来.
我觉得可以在数据里建一个临时表,在需要打印的时候把相关的数据存进去,打印完了再删除.这样既不影响你数据库的其它操作,也不占用多少空间,而且实现起来很方便,你觉得呢?
好了,再有问题直接发到我QQ吧,我现在要开工啦
78hgdong 2006-07-10
  • 打赏
  • 举报
回复
谢谢你的关注,
几万张的图片存储到数据库里面占用空间太大了,
所以我选择把图片存储在D盘的 D:\picture文件夹里,
并且每次所要打印的图片数量是不同的,1、2、3--150张左右不等,
另外我把图片名称单独存储在数据库表TPicture,
这样就可以根据要查询出的图片数量和名称,
来加载D:\picture文件夹里的图片实现多页打印了。
就是没有找到好的实现方法???继续等待。。。。
madbo 2006-07-10
  • 打赏
  • 举报
回复
呵呵,刚才发的急了,其实有办法的.注意我说的第5条,你肯定没好好理解!
可以试下这样.
还是在ADOQuery1的AfterScoll事件里添加以下代码:

procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
var JpegPic : TJpegImage;
begin
if (not ADOQuery1.Bof) or (not ADOQuery1.Eof) then
begin
JpegPic := TJpegImage.Create;
try
JPEGPic.LoadFromFile(ADOQuery1.FieldByName('Name'),AsString);
//这里用数据库里的文件名,当然需要是完整带路径的文件名
QRImage1.Picture.Graphic := JPegpic;
except
end;
JpegPic.Free;
end;
end;

哈哈,实现了吧?
madbo 2006-07-10
  • 打赏
  • 举报
回复
TO楼主:
我不明白你是想实现图片打印功能,还是想刨根问底的实现你想搞明白的技术问题(从硬盘批量读图片打印?而且要绑定到数据里的图片名?).
如果是前者,个人认为用数据库存图片是最简单有效的办法,而且已经实现.
如果是后者,那我只能说报歉,现在没有那么多时间帮你解决这个问题.
78hgdong 2006-07-10
  • 打赏
  • 举报
回复
楼上,我用的是SQL SERVER2000数据库,TPicture是一个只存储图片名称的表,里面并不存储图片,
注意:我的图片是存储在D盘上 D:\picture文件夹里,图片格式是*.JPG
现在想'select TPName from TPicture'查询出图片的名称,
然后加载存储在D盘上 D:\picture文件夹里的图片到QuickRep1上,实现多页打印.

可有好方法? TKS!
madbo 2006-07-10
  • 打赏
  • 举报
回复
不好意思,需要补充一下.
用我的方法需要先把图片存入数据库.然后从数据库里读取.
madbo 2006-07-10
  • 打赏
  • 举报
回复
哦,这是我刚刚研究的问题,已经解决,其实只需要一个QRImage控件就够了.
说下我的解决方法.
用的是Access数据库,ADOQuery,QRImage,QuickRep,QRDBText这几个控件实现双列打印(也可以更多列,自己设置).
假设一下你的数据库TPicture表有两个字段,Name(图片名)和Image(OLE对象存图片).
步骤:
1.新建Form1,添加ADOQuery1,设置数据库连接.其SQL属性添加查询语句'select * from TPicture';
2.添加QuickRep1,属性:Page->Comlumns设置为2(列数);DataSet设置为ADOQuery1;
3.添加QRBand1,BandType属性设为rbDetail,注意!!!如果这里设置不正确,就不能显示出数据库所有内容.
4.在QRBand1上添加QRImage1和QRDBText1,其中QRImage所有属性默认;QRDBText1的DataSet设为ADOQuery1,DateField属性设为'Name'(TPicture表里的字段)
5.真正有技术含量的地方在这里.强调!!! 在ADOQuery1的AfterScroll事件中添加读取图象的代码,QRImage默认读取的格式是BMP,如果你的数据库存是JPEG格式需要自己转换,恕不赘述.
6.好了,到这里已经基本搞定,加个按钮Button1,在Click事件里添加代码'QuickRep1.Preview;'F9运行程序点Button1就可以看到预览页面了.
7.如果有其它不明白的地方,可以加我QQ17382959,注明CSDN学友就可以了

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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