| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7679 人关注过本帖, 3 人收藏
标题:vfp9报表保存为高分辨率图片
取消只看楼主 加入收藏
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
非常感谢版主的辛勤付出!

测试后正是我要的结果,研究中 ……  以下是page/2的效果,很满意!

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2019-8-2 15:45编辑过]

2019-08-02 15:43
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2019-8-2 16:37:17的发言:

cFile = "C:\temp\kkkk" + PADL(nPageNo,LEN(TRANSFORM(this.PageTotal)),"0") + ".bmp"
这句的 this.PageTotal 有问题,要遍扫描所有页面后才可得到。
或取足够大的数:
cFile = "C:\temp\kkkk" + PADL(nPageNo,6,"0") + ".bmp"


只要报表页中有涉及到pagetotal,好像报表就会运行两次得到pagetotal值。

如果ListenerType = 3,一次输出所有页,是否会快点?

我测试改成png格式,page/4的效果已经非常好了,得到的文件也就几百K,非常不错!

很感谢版主的热情相助!
2019-08-02 17:23
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
回复 37楼 吹水佬
谢谢,够用了,很好!我的报表页不多,一般也就几页。
目地达到,可以不用word和excel了…也可以不用安装虚拟打印机了!

周一再做优化!祝周末愉快!
辛苦了,再次感谢!
2019-08-02 21:54
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏(1)
得分:0 
回复 37楼 吹水佬
修改了下,效果不错!周末愉快!

程序代码:
*** test.prg ***
CLEAR
#DEFIN PixelFormat32bppARGB  0x26200A
DECLARE LONG GdipCreateBitmapFromScan0 IN gdiplus.dll LONG, LONG, LONG, LONG, STRING@, LONG@
DECLARE LONG GdipGetImageGraphicsContext IN gdiplus.dll LONG, LONG@
DECLARE LONG GdipSaveImageToFile IN gdiplus.dll LONG, STRING@, STRING@, LONG
DECLARE LONG GdipDisposeImage IN gdiplus.dll LONG
DECLARE LONG GdipDeleteGraphics IN gdiplus.dll LONG

oRL = CREATEOBJECT("ReportListener")
oRL.ListenerType = 3
REPORT FORM ? OBJECT oRL

for aa = 1 to oRL.PageTotal
        LOCAL nWidth, nHeight, hBitmap, hGraphics, cFile, bmpGUID
        nWidth =  oRL.GetPageWidth()/4
        nHeight = oRL.GetPageHeight()/4   && 分辨率太大图片好象有点不正常,情况不明。
        hBitmap = 0
        GdipCreateBitmapFromScan0(nWidth, nHeight, 0, PixelFormat32bppARGB, 0, @hBitmap)
        IF hBitmap == 0
            ? "创建Bitmap失败"
            RETURN
        ENDIF
        hGraphics = 0
        GdipGetImageGraphicsContext(hBitmap, @hGraphics)
        IF hGraphics == 0
            GdipDisposeImage(hBitmap)
            ? "获取Graphics失败"
            RETURN
        ENDIF
        oRL.OutputPage(aa, hGraphics, 1, 0,0,nWidth,nHeight, 0,0,nWidth,nHeight)
        cFile = "D:\temp\kkkk" + alltrim(str(aa)) + ".png"
        bmpGUID = 0h06F47C55041AD3119A730000F81EF32E
        GdipSaveImageToFile(hBitmap, STRCONV(cFile+0h00,5),@bmpGUID,0)
        GdipDisposeImage(hBitmap)
        GdipDeleteGraphics(hGraphics)
endfor 
2019-08-03 07:43
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
回复 41楼 吹水佬
是的!感谢你的帮助!

有你真好!

VFP论坛能坚持到现在并还能够给予及时的帮助,真是难能可贵!

以后只要有时间,一定经常光顾这里,只有不断地学习,才能提高……

祝:生活愉快,事业有成!

[此贴子已经被作者于2019-8-3 22:13编辑过]

2019-08-03 21:13
快速回复:vfp9报表保存为高分辨率图片
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020335 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved