`
shangbingbing
  • 浏览: 35995 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

润乾报表中html数据类型单元格内容自动扩展的问题解决方案

阅读更多

【关键字】

    润乾报表;html数据类型;尺寸调整方式;按单元格内容扩大;Tomcat;MyEclipse

 

本人使用的润乾报表是4.0版本,最近在项目中碰到这样一个问题。详情如下:Oracle数据库中有个表字段为CLOB类型,里面存储的是html片段,现在需要在润乾报表中显示此字段,理所当然的方式就是在润乾报表中将对应的单元格数据类型设置为“html类型,润乾报表会自动将html片段渲染成合理的WEB样式。由于这些html片段的大小是不一致的,所以在单元格属性中将尺寸调整方式设置为按单元格内容扩大,这样可以保证单元格高度会随着html片段的长短而动态改变,达到最佳的视觉效果。但是,现在问题出现了,按单元格内容扩大竟然不起作用,单元格高度一致保持着设计时的高度。而当数据类型为文本时这是没有问题的。

 

201097上午,我把这个问题反馈给了润乾公司,下午他们的工程师给我回复了一个email,附带了一个report4.jar文件,说是升级文件,并建议我将此文件覆盖系统中的相同文件,然后采用新的数据类型富文本试试看。我试了试,富文本类型可以解决html片段换行的问题,但是产生了一个更加严重的问题:它会忽略掉html片段中的所有html样式元素,只保留文本,而且不支持图片渲染;这样是不行的。迫于无奈,本人决定另寻其他途径解决。

 

    经过将近三个小时的反复测试,本人终于找到了一个相对合理的解决方案,下面将详细说明此解决方案。

 

第一步, 设计润乾报表模板,并将相关单元格的数据类型设置为“HTML”类型(这里不再详细说明如何设计报表模板,请参考润乾报表相关教程)。

 

第二步, 编辑此单元格的表达式。表达式内容如下:

"<div class='HtmlContainer'>" + ds1.Select(HTML) + "</div>"

其中,ds1.Select(HTML)中的HTML为数据库表字段名称,此表达式的作用是从数据库表中取出HTML片段,并将其放置在一个DIV中,并为此DIV设置class名称HtmlContainer

 

第三步, 保存此报表模板,暂时命名为html_test.raq,并将此报表模板文件拷贝到MyEclipse工程中,以便测试。

 

第四步, 在工程中新建一个JSP页面,然后在body区域输入下面的代码。

//这里采用tag样式在jsp中渲染润乾报表,本人将在另外的文章中介绍
//润乾报表的其他几种渲染技术,诸如JS方式,API方式等等,
<report:html 
funcBarFontSize="13" 
reportFileName="html_test.raq" 
name="report1"/>

  

 

//首先声明,下面这段JS代码必须放置在润乾报表渲染区域的下面,这样才能保证这段JS代码对上面的设置生效。
   <script type="text/javascript">
      var objList  = document.getElementsByTagName("DIV");
      for(var i = 0; i<objList.length; i++)
      {
         if(objList[i].className == "HtmlContainer")
         {
            var divHeight = objList[i].scrollHeight;
            var parentNode = objList[i].parentNode;
            parentNode.style.height = divHeight;
         }
      }
   </script>

 

 

 

上面这段JS代码的作用,首先是获取页面文档中的所有DIV元素,然后逐个进行检查,如果此DIVclassNameHtmlContainer,则说明此DIV是润乾报表中刻意设置的用来处理HTML数据类型单元格无法自动扩充问题的。

那么就获取此DIV的内容高度,然后将此高度赋值给其上级元素TD(毫无疑问,润乾报表渲染后是一个table表格,所以此DIV的上级元素肯定是一个TD元素,不信你可以查看WEB的源代码),通过此动作,重新调整对应TDTR的高度,从而达到了动态调整单元格的目的。

 

【小北 2010-09-09

 

1
0
分享到:
评论
1 楼 zhxh007 2010-09-16  
导出excel正常么

相关推荐

    Exce百宝箱——2012版本.rar

    【修正合并单元格】:使已经合并的区域中的每个单元格都有数据,从而在公式引用单元格时不会产生空白 【合并与合计】:可以任意指定两列,对其中一列的数据合并同类项,而另一列对应的数值则求合计,合计结果存放在...

    免费DataGridView打印及.NET轻松打印控件5.0版

    借助该函数的功能,您可以在Panel等容器控件中设计好要打印的内容及打印相对位置,控件轻松帮助您解决打印问题。(参见演示实例) 5、增加了报表文件及模板文件的自动关联功能。在运行了“打印控件安装.msi”文件...

    人力资源管理软件(完全免费)

    人力资源管理软件解决了合同类型定义里面的自定义扩展属性删不掉的问题。(感谢☆缘☆) 2008-04-09 人力资源管理软件发布1.5版本,做了以下改进 员工资料支持拼音查询(感谢☆缘☆) 员工资料输入身份证后自动...

    asp.net知识库

    asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL-DMO实现定制SQL Scripts Create Tables and Build inserts from Tables by using ...

    易语言程序免安装版下载

    修改扩展界面支持库一,禁止透明标签在父窗口刷新时自动刷新,以解决其导致窗口刷新缓冲的问题。 8. 改进应用接口支持库中“设置屏幕分辨率”命令。 9. 修改外部数据库在“表中记录数为零”时可能导致程序崩溃的...

    Altium Designer Beta 19.0.10完整版安装包+安装教程+和谐文件

    修复了BOM报表中组件的供应商链接顺序与该组件的供应商链接参数的实际顺序(BC:9691)不匹配的问题。 27714 修复了BOM报告问题,其中“包含服务器参数”功能将不同的供应商返回到组件“属性”中指定的供应商。 ...

    会计理论考试题

    37.在资源管理器中,双击扩展名为“.TXT”的文件,Windows98会自动打开___B___。 A、写字板 B、记事本 C、画笔 D、剪贴板 38.下列软件中,___C___都属于系统软件。 A、DOS、WPS、Windows B、AutoCAD、Windows NT、...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例001 根据需要创建所需解决方案 2 实例002 统一窗体中控件的字体设置 3 实例003 设置程序代码行号 5 实例004 通过“格式”菜单布局窗体 6 实例005 为项目添加dll文件引用 7 实例006 为项目添加已有类 8 实例007 ...

    明日科技C#开发入门及项目实战

    实例001 根据需要创建所需解决方案 实例002 统一窗体中控件的字体设置 实例003 设置程序代码行号 实例004 通过“格式”菜单布局窗体 实例005 为项目添加dll文件引用 实例006 为项目添加已有类 实例007 为项目添加第...

    C#编程经验技巧宝典

    2 &lt;br&gt;0003 设置程序代码行序号 3 &lt;br&gt;0004 开发环境全屏显示 3 &lt;br&gt;0005 设置窗口的自动隐藏功能 3 &lt;br&gt;0006 根据需要创建所需解决方案 4 &lt;br&gt;0007 如何使用“验证的目标架构”功能 4 ...

    EXCEL 2007 宝典 附光盘文件

    cell references.xlsx:用于演示复制公式时使用不同类型单元格引用的效果的工作簿。 circular reference.xlsx:一个演示目的循环引用的工作簿。打开这个工作簿时,会看见有关循环引用的信息。 worksheet functions...

Global site tag (gtag.js) - Google Analytics