| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7491 人关注过本帖, 3 人收藏
标题:vfp9报表保存为高分辨率图片
只看楼主 加入收藏
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
结帖率:76.47%
收藏(3)
 问题点数:0 回复次数:43 
vfp9报表保存为高分辨率图片
oListener = Createobject("ReportListener")
oListener.ListenerType=1
Report FORM reports\report_cght.frx Object oListener
For nPageIndex=1 To oListener.PageTotal
      cOutputFile = "tmp"+Trans(nPageIndex)+".jpg"
      oListener.OutputPage(nPageIndex,cOutputFile, 102)
NEXT

默认输出的是压缩格式的图片,我想得到高分辨率的图片,请各位指点,谢谢!

vfp帮助文件中有说到:
报表监听器类原始功能所提供的图像页包含了多种文件类型,但它所支持的这些图像类型格式受到某些默认设置的限制。如这个例子中的 TIFF,报表监听器为了性能上的原因,提供的是压缩格式的 TIFF 文件。但是,你可以摆脱原始实现的设置所带来的限制。你可以给报表监听器提供一个 GDI+ 图形句柄,并在 OutputPage 方法中要求它将页绘制到这个设备中。然后你可以将这个结果保存为一个图像文件,这时你就可以使用非默认的规格。Visual FoxPro 提供了一个类来帮助你完成这种以及其它与 GDI+ 相关的任务。更多的信息,请参见 GDI+ API 包装基本类。

思路 ……
oReportListener=CREATEOBJECT("reportlistener")
oReportListener.listenertype=3
REPORT FORM reports\report_cght.frx OBJECT oReportListener

_Bitmap = NEWOBJECT("gpBitmap", "_GDIplus.vcx")
_Graphics = NEWOBJECT("gpGraphics", "_GDIplus.vcx")
_Graphics.CreateFromImage(_Bitmap)

oreportlistener.outputpage(1,‘你可以给报表监听器提供一个 GDI+图形句柄,并在 OutputPage 方法中要求它将页绘制到这个设备中’,1)   

_Bitmap.SaveToFile("Test.bmp", "image/png or bmp","quality=100")


求大神帮忙解决!

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

搜索更多相关主题的帖子: 报表 图片 文件 监听 GDI 
2019-07-31 16:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
以下是引用radiofan在2019-7-31 16:59:28的发言:

默认输出的是压缩格式的图片,我想得到高分辨率的图片,请各位指点,谢谢!

“压缩格式”与“高分辨率”是什么关系?
如果想不压缩,输出BMP格式:
OutputPage方法的第3个参数(nDeviceType )为105时指定一个文件名,输出将作为一个 BMP 类型图像保存。
2019-08-01 05:52
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2019-8-1 05:52:03的发言:


“压缩格式”与“高分辨率”是什么关系?
如果想不压缩,输出BMP格式:
OutputPage方法的第3个参数(nDeviceType )为105时指定一个文件名,输出将作为一个 BMP 类型图像保存。


事实上BMP也是像素很低的,与其他几个文件格式一样!似乎都是被处理过的低像素图片!

—— 报表监听器类原始功能所提供的图像页包含了多种文件类型,但它所支持的这些图像类型格式受到某些默认设置的限制。如这个例子中的 TIFF,报表监听器为了性能上的原因,提供的是压缩格式的 TIFF 文件。

[此贴子已经被作者于2019-8-1 07:39编辑过]

2019-08-01 07:37
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2019-8-1 05:52:03的发言:


“压缩格式”与“高分辨率”是什么关系?
如果想不压缩,输出BMP格式:
OutputPage方法的第3个参数(nDeviceType )为105时指定一个文件名,输出将作为一个 BMP 类型图像保存。

图片附件: 游客没有浏览图片的权限,请 登录注册
bmp格式
图片附件: 游客没有浏览图片的权限,请 登录注册
png格式
2019-08-01 07:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
回复 3楼 radiofan
像素多少可能与VFP报表文件设计有关,如设计打印一个字符要用多少个像素,这是在报表设计时决定的吧?
2019-08-01 07:48
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2019-8-1 07:48:06的发言:

像素多少可能与VFP报表文件设计有关,如设计打印一个字符要用多少个像素,这是在报表设计时决定的吧?


不会,报表直接打印或者通过虚拟打印机打印成图片非常清楚!
图片附件: 游客没有浏览图片的权限,请 登录注册
虚拟打印机输出的png图片

[此贴子已经被作者于2019-8-1 07:59编辑过]

2019-08-01 07:51
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2019-8-1 07:48:06的发言:

像素多少可能与VFP报表文件设计有关,如设计打印一个字符要用多少个像素,这是在报表设计时决定的吧?


思路有,但未实现 ……
oReportListener=CREATEOBJECT("reportlistener")
oReportListener.listenertype=3
REPORT FORM reports\report_cght.frx OBJECT oReportListener

_Bitmap = NEWOBJECT("gpBitmap", "_GDIplus.vcx")
_Graphics = NEWOBJECT("gpGraphics", "_GDIplus.vcx")
_Graphics.CreateFromImage(_Bitmap)

oreportlistener.outputpage(1,‘你可以给报表监听器提供一个 GDI+图形句柄,并在 OutputPage 方法中要求它将页绘制到这个设备中’,1)   

_Bitmap.SaveToFile("Test.bmp", "image/png or bmp","quality=100")
2019-08-01 08:02
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2019-8-1 07:48:06的发言:

像素多少可能与VFP报表文件设计有关,如设计打印一个字符要用多少个像素,这是在报表设计时决定的吧?


还有,set reportbehavior 90时报表预览与输出都有问题,不知您是否有过研究!
详见:https://bbs.

.OutputPage(nPageIndex,cOutputFile, 100)  输出为EMF格式,输出的报表文件正常,其他格式文字都是放大的并溢出页面。

[此贴子已经被作者于2019-8-1 08:09编辑过]

2019-08-01 08:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
试了一下,报表预览与BMP屏幕显示效果分不出差别:
报表预览
图片附件: 游客没有浏览图片的权限,请 登录注册

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

测试代码
CREATE CURSOR tt (ss C(10), ff I)
FOR i = 1 TO 10
    INSERT INTO tt VALUES (PADL(i, 10, "0"), i)
ENDFOR
oRL = CREATEOBJECT("ReportListener")
oRL.ListenerType = 1
REPORT FORM 报表扩展功能示例.frx OBJECT oRL NOWAIT
oRL.OutputPage(1, "C:\temp\kkkk.bmp", 105)


[此贴子已经被作者于2019-8-1 08:27编辑过]

2019-08-01 08:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
set reportbehavior 80/90 都试过,未见异常
运行环境:
Win10_64位专业版_1903_18362.239
VFP9_SP2_7423
2019-08-01 08:37
快速回复:vfp9报表保存为高分辨率图片
数据加载中...
 
   



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

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