TIPTOP GP5打印报表时如何在水晶报表中显示服务器上的图片

本文详细介绍了如何在使用易拓(TIPTOP)和CrystalReport(CR)进行报表设计时,实现自定义图片的显示,包括图片的上传、地址获取、CR中图片的显示方式及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、易拓使用Crystal Report打印出来的报表中的Logo是如何显示出来的?

作业步骤如下:

1.在p_zo中设置需要在报表中显示的图片,截图如下:

p_zo









2.图片文档的存储位置如下:

存储位置



存储相关的4gl代码如下:

IF NOT cl_null(g_zo.zo01) THEN
  LET ls_file = cl_browse_file()
  IF NOT cl_null(ls_file) THEN
     LET ls_server_file = "$TOP/doc/pic/pdf_logo_",g_dbs CLIPPED,g_zo.zo01,".jpg"
     LET l_cmd = "rm ",ls_server_file CLIPPED
     RUN l_cmd
     IF NOT cl_upload_file(ls_file, ls_server_file) THEN
        CALL cl_err(NULL, "lib-212", 1)
        RETURN
     ELSE
        LET l_cmd = "chmod 777 ",ls_server_file CLIPPED," 2>/dev/null"
        RUN l_cmd
        CALL p_zo_img()
     END IF
  END IF
END IF

$TOP实际路径如下:

变量位置


结论:图片地址:$TOP/doc/pic/pdf_logo_+营运中心+语言别+jpg。实际测试发现:非jpg格式的原始图片也支持,比如网络上比较常用的png格式。

3.Crystal Report中是如何获得这个文件的地址呢?

45



这个图片对象的图形位置来自于公式字段:location。我们可以猜测:这个location就是指向我们上一步骤储存在服务器上的文件了。那接下来我们就去看看location这个公式字段里面是否赋值的就是我们设定好的文件位置呢?你真的去看了吗?是不是大失所望,里面空空如也。不着急,既然CR模板里面没有给值,那么可能是在Runtime的时候给的值,那给的值是什么呢?CR服务器中使用aspx页面来加载并显示图片的,由于看不到源代码,所以猜测是在Default.aspx页面中给location赋的值。这一点,其实在unix/linux的console中也可以得到验证:

6

其实就是l_logo的值,一个存储了图片网址的变量。

4.图片的uri地址是如何显示为图片的?
上一步骤中,我们仅仅是获得了地址,那么Crystal Report是如何将其显示为图片的呢?在CR服务器的web.config中,我们可以看到下面这一段:

<httpHandlers>
	<add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</httpHandlers>

到此,你应该明白了吧!

5.言外之意
之前常在QQ群中看到有些人做的报表出现错误,很大一部分原因就是在设计新报表的时候,将图片删除了,同时也将location这个公式删除了,报表加载的时候,系统要给location赋值了,可以location却不见了,所以即使location用不到,也要将其保留。其实,鼎新可以考虑修改一下程序,没有发现location这个公式,则不要赋值了。CR模板中的其它对象,比如预留的参数字段,都要保留,不要随便删除。


二、如何举一反三,在CR中显示除logo图片之外的自定义图片呢?

我们可以参考上面的方式,将除了logo之外的图片也通过类似的方式传给报表来显示

1.如何给CR传递图片的uri?

由于TIPTOP主机跟CR主机是分离开的,我们要想在两者之间传递数据,最简单的方法就是把4gl中的地址通过参数的方式给CR主机。CR模板里面预留了20个参数字段。

2.如何将图片上传到TIPTOP主机?

参考p_zo即可。文件的位置也可以自己定。

3.设计CR模板

在模板文件中放置图片,且设置图片为某个参数字段。

4. 4gl中给参数赋值,参考代码如下:

8

5.大功告成!

好了,现在把CR模板传上去,4gl编译、链接。成功!

三、后记

1.对于一些没有分组的报表,IE在显示报表的时候,仍在左边预留了menutree的东东,对于一个痛苦的完美主义者来说,鼎新应该预留个借口,让我们告诉CR,我这个报表没有分组,不要给我显示menutree,这样子出来的预览画面也美观的多。(也许是CR本身的限制,未考证)

2.也许有人会说,利用上面的传参数的方法,毕竟传递的数据有限,如果是要将图片放在明细段中,又该如何呢?哈哈,这个其实也简单,我都举一反三了,你也来一下呗!

3.另一种方法是将图片储存在table中,然后在CR中显示。这个大家期待下一篇博客吧。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值