<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>润乾软件</title>
	<atom:link href="http://www.runqian.com.cn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.runqian.com.cn</link>
	<description>创新技术推动应用进步！</description>
	<pubDate>Fri, 03 Sep 2010 02:06:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>润乾报表在linux和windows中字体显示不一致解决办法</title>
		<link>http://www.runqian.com.cn/archives/2158.html</link>
		<comments>http://www.runqian.com.cn/archives/2158.html#comments</comments>
		<pubDate>Fri, 03 Sep 2010 02:06:24 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[k.性能优化]]></category>

		<category><![CDATA[debain版本]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[windows]]></category>

		<category><![CDATA[同步]]></category>

		<category><![CDATA[字体]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2158</guid>
		<description><![CDATA[客户经常遇到这样一个问题：报表字体为宋体，在windows中展现正常，能达到需要的效果，但是把应用放到linux中，同样的报表展示的字体样式就跟windows不一样，未达到预期效果。最后检查客户l... ]]></description>
			<content:encoded><![CDATA[<p><strong>问题描述</strong></p>
<p>客户经常遇到这样一个问题：报表字体为宋体，在windows中展现正常，能达到需要的效果，但是把应用放到linux中，同样的报表展示的字体样式就跟windows不一样，未达到预期效果。最后检查客户linux的字体发现是客户linux中的宋体版本跟windows中的不一样造成的，所以造成展现的报表里面字的样式不一致。</p>
<p><strong>解决方法</strong></p>
<p>同步windows的字体到linux系统中，使二者的字体版本和样式一样，这样展现出来的字体样式就没有区别了。</p>
<p><strong>实现步骤</strong></p>
<p>给linux安装字体的步骤如下（以debain版本的linux为例）：</p>
<p><strong>1，拷贝字体到系统字体目录下，比如/usr/share/fonts/truetype/hahafonts(hahafonts请自行建立)。</strong></p>
<p>到win下找到你需要的字体，比如拷贝了simhei.ttf simyou.ttf tahoma.ttf verdana.ttf simsun.ttc tahomabd.ttf verdanab.ttf等7款字体。当然，如果想要简单可以只拷simsun，tahoma就行了。</p>
<p>cp *.tt* /usr/share/fonts/truetype/hahafonts/<br />
cd /usr/share/fonts/truetype/hahafonts/</p>
<p><strong>2，生成字体的fonts.dir+fonts.scale文件：</strong></p>
<p>Debian下：</p>
<p>apt-get install ttmkfdir<br />
ttmkfdir &amp;&amp; cp fonts.scale fonts.dir</p>
<p><strong>3，把字体路径加到xfree86文件中，如/etc/X11/XF86Config-4：</strong></p>
<p>添加内容如下：</p>
<p>FontPath “/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType”<br />
FontPath “/var/lib/defoma/x-ttcidfont-conf.d/dirs/CID”<br />
FontPath “/usr/share/fonts/truetype/gbk”<br />
FontPath “/usr/share/fonts/truetype/hahafonts”</p>
<p>注：/usr/share/fonts/truetype/gbk中为其他点阵字体，可以不加。</p>
<p><strong>4，执行fc-cache -v -f：</strong></p>
<p>注：fc-cache — build font information cache files</p>
<p><strong>5，firefly补丁：</strong></p>
<p>http://hahaghost.512j.com/linuxbak/fonts.conf替换/etc/fonts/里的fonts.conf文件，然后加上源：</p>
<p>把下面2行加到/etc/apt/sources.list里<br />
deb http://debian.okey.net/debian-uo/ sid firefly java marillat rareware misc<br />
deb http://debian.okey.net/debian-fonts/ ./</p>
<p>然后执行apt-get update&amp;&amp;apt-get upgrade就可以了。</p>
<p>注：执行apt-get upgrade后，自动升级的有：libfontconfig,libxft,fontconfig都是修改的过的补丁。</p>
<p><strong>6，重启之后就可以看到适合的字体了：</strong></p>
<p>然后xfsfonts | grep gbk，查找您需要的字体，添加到gtkrc或者gtkrc.zh_CN中。</p>
<p>其中的gbk是个例子，可以换成自己需要的，比如simsun等。</p>
<p>这样，报表在Linux和Windows中字体显示就一致了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2158.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何处理多层统计图2</title>
		<link>http://www.runqian.com.cn/archives/2156.html</link>
		<comments>http://www.runqian.com.cn/archives/2156.html#comments</comments>
		<pubDate>Thu, 02 Sep 2010 01:46:14 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[b.设计基础]]></category>

		<category><![CDATA[分类轴]]></category>

		<category><![CDATA[多层统计图]]></category>

		<category><![CDATA[系列值]]></category>

		<category><![CDATA[系列名称]]></category>

		<category><![CDATA[饼形图]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2156</guid>
		<description><![CDATA[在做数据统计时，用饼图去展示各数据的比例的需求时常会遇到。在润乾报表设计器中，饼图的分类轴和系列的值都是由可扩展单元格的数据来定义的。某些情况下用户做出来的饼图会出现如... ]]></description>
			<content:encoded><![CDATA[<p>在做数据统计时，用饼图去展示各数据的比例的需求时常会遇到。在润乾报表设计器中，饼图的分类轴和系列的值都是由可扩展单元格的数据来定义的。某些情况下用户做出来的饼图会出现如图所示的效果：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-003p32c93159.png" alt="" width="454" height="320" /></p>
<p>这样即无法实现用户的需求又不美观。</p>
<p>下面就来介绍如何解决多层饼图的问题。</p>
<p><strong>实现步骤</strong></p>
<p><strong>1，制作报表，如下图</strong>：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-004n6a33cf01.png" alt="" width="554" height="80" /></p>
<p><strong>2，在报表中增加统计图并设置统计图分类轴和系列值，如图：</strong></p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-005n309d0159.png" alt="" width="554" height="483" /></p>
<p>注：系列名称必须是固定的，不可以写成c3，c3是一个变化的值。</p>
<p><strong>3，发布报表预览如下：</strong></p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-006p1b4266ac.png" alt="" width="433" height="319" /></p>
<p>按照以上的步骤不仅可以用润乾报表设计器中实现以从数据库中读取数据设计饼形图这个需求，还不会出现多层饼图的不美观的效果。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2156.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>报表组查询后显示当前tab页</title>
		<link>http://www.runqian.com.cn/archives/2154.html</link>
		<comments>http://www.runqian.com.cn/archives/2154.html#comments</comments>
		<pubDate>Wed, 01 Sep 2010 01:49:49 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[k.性能优化]]></category>

		<category><![CDATA[jsp代码]]></category>

		<category><![CDATA[js传参]]></category>

		<category><![CDATA[当前tab页]]></category>

		<category><![CDATA[报表组]]></category>

		<category><![CDATA[隐藏属性]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2154</guid>
		<description><![CDATA[客户制作了一个带有参数模板的报表组，客户希望在点击查询报表组之后，页面不跳转回报表组的第一个tab页，而是停留在客户点击查询按钮时的tab页面。而目前润乾报表默认的方式是跳转回... ]]></description>
			<content:encoded><![CDATA[<p><strong>问题描述</strong></p>
<p>客户制作了一个带有参数模板的报表组，客户希望在点击查询报表组之后，页面不跳转回报表组的第一个tab页，而是停留在客户点击查询按钮时的tab页面。而目前润乾报表默认的方式是跳转回到第一个tab页，不会停留在当前tab页上，所以要实现客户的需求采用js的方式给报表传参数，控制报表显示的tab页。</p>
<p><strong>实现思路</strong></p>
<p>给报表组的页面传一个参数showFlag，通过这个参数控制报表显示或者隐藏哪个tab页，再点击tab页标签的时候就给页面传对应的showFlag参数，然后调用润乾的点击tab页的函数，这样如果把参数顺利传递过去就可以控制报表显示或隐藏哪个tab页了。</p>
<p><strong>实现步骤</strong></p>
<p><strong>1，以三个tab页的报表组为例，通过showFlag参数控制报表组显示或隐藏tab页的java代码和js函数如下：</strong></p>
<p>&lt;%<br />
out.println(”showFlag:”+showFlag);<br />
if(”2″.equals(showFlag)){%&gt;<br />
标志为2的时候就显示第二张报表，就是div名字为div_item2的层<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById( “div_item2″ ).style.display = “”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
//更改tab页字体的颜色<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
document.getElementById(”tab_item2″).className=”rq_curr”;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}else if(”3″.equals(showFlag)){%&gt;<br />
显示第三个报表的div，隐藏第一、二个报表的div<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item3″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById(”tab_item3″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}<br />
else{%&gt;<br />
显示第一个报表的div，隐藏第二、三个报表的div<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item1″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
document.getElementById(”tab_item1″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}%&gt;</p>
<p>这样就可以实现通过showFlag参数值不同设置隐藏或显示相应的tab页。</p>
<p><strong>2，制作报表组的参数模板：</strong></p>
<p>参数模板的样式如下图所示，需要注意的是第二行B2单元格的变量名设置为showFlag，也就是上面提到的参数。<br />
<img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-001p6a3fb7e7.png" alt="" width="553" height="251" /></p>
<p><strong>3，通过点击tab页给报表组传参数，设置tab页的隐藏属性。代码如下：</strong></p>
<p>&lt;script language=”javascript”&gt;<br />
//重新定义第二个报表tab页的点击事件<br />
document.getElementById(’tab_item2′).onclick=function()<br />
{ //显示第二个报表的div，隐藏第一、三个报表的div<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById( “div_item2″ ).style.display = “”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
//更改tag标签字体的颜色<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
document.getElementById(”tab_item2″).className=”rq_curr”;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
//调用快逸自定义的tab页自定义函数<br />
_groupClicked(document.getElementById(’tab_item2′));<br />
document.getElementById(”showFlag”).value=2;<br />
}<br />
//重新定义第一个报表tab页的点击事件<br />
document.getElementById(’tab_item1′).onclick=function(){<br />
document.getElementById( “div_item1″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
document.getElementById(”tab_item1″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
_groupClicked(document.getElementById(’tab_item1′));<br />
document.getElementById(”showFlag”).value=1;<br />
}<br />
//重新定义第三个报表tab页的点击事件<br />
document.getElementById(’tab_item3′).onclick=function(){<br />
document.getElementById( “div_item3″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById(”tab_item3″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
_groupClicked(document.getElementById(’tab_item3′));<br />
document.getElementById(”showFlag”).value=3;<br />
}<br />
<strong>&lt;/script&gt;</strong></p>
<p><strong>4，编写完整的jsp代码：</strong></p>
<p>有了以上的js函数和报表组参数模板的设置，就可以编写完整的jsp代码来发布报表组了，jsp的全部代码如下：</p>
<p>&lt;%@ page contentType=”text/html;charset=GBK” %&gt;<br />
&lt;%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %&gt;<br />
&lt;%@ page import=”java.io.*”%&gt;<br />
&lt;%@ page import=”java.util.*”%&gt;<br />
&lt;%@ page import=”com.runqian.report4.view.*”%&gt;<br />
&lt;html&gt;<br />
&lt;body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0&gt;<br />
&lt;%<br />
String showFlag1 = request.getParameter(”showFlag”);<br />
//接收参数，把参数拼成name=value;name2=value2;…..的形式<br />
StringBuffer param=new StringBuffer();<br />
Enumeration paramNames = request.getParameterNames();<br />
if(paramNames!=null){<br />
while(paramNames.hasMoreElements()){<br />
String paramName = (String) paramNames.nextElement();<br />
String paramValue=request.getParameter(paramName);<br />
if(paramValue!=null){<br />
//把参数拼成name=value;name2=value2;…..的形式<br />
param.append(paramName).append(”=”).append(paramValue).append(”;”);<br />
}<br />
}<br />
}<br />
String reportParamsId=request.getParameter(”reportParamsId”);<br />
Hashtable params = null;<br />
String showFlag=null;<br />
if(!”&#8221;.equals(reportParamsId) &amp;&amp; reportParamsId != null){<br />
params = com.runqian.report4.view.ParamsPool.get( reportParamsId );<br />
showFlag=(String) params.get(”showFlag”);<br />
} else{<br />
showFlag=request.getParameter(”showFlag”);<br />
//out.print(”showFlag=============”+showFlag);<br />
if(showFlag==null || showFlag.equals(”&#8221;)){<br />
showFlag=”1″;<br />
}<br />
%&gt;<br />
&lt;table id=”rpt” align=”center”&gt;&lt;tr&gt;&lt;td&gt;<br />
&lt;table id=”param_tbl” width=”100%” height=”100%” align=”top”&gt;&lt;tr&gt;&lt;td&gt;<br />
&lt;report:param name=”form1″ paramFileName=”group_arg.raq”<br />
needSubmit=”no”<br />
params=”&lt;%=param.toString()%&gt;”<br />
/&gt;<br />
&lt;/td&gt;<br />
&lt;td&gt;&lt;a href=”javascript:_submit( form1 )”&gt;&lt;img src=”../images/query.jpg” border=no style=”vertical-align:middle”&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;&lt;/table&gt;<br />
&lt;!–导入存有工具栏的jsp–&gt;<br />
&lt;jsp:include page=”toolbar.jsp” flush=”false” /&gt;<br />
&lt;table align=center&gt;<br />
&lt;tr&gt;&lt;td&gt;<br />
&lt;report:group groupFileName=”group.rpg”<br />
funcBarLocation=”&#8221;<br />
exceptionPage=”/reportJsp/myError2.jsp”<br />
params=”&lt;%=param.toString()%&gt;”<br />
/&gt;<br />
&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;%<br />
if(”2″.equals(showFlag)){%&gt;<br />
标志为2的时候就显示第二张报表，就是div名字为div_item2的层<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById( “div_item2″ ).style.display = “”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
//更改tab页字体的颜色<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
document.getElementById(”tab_item2″).className=”rq_curr”;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}else if(”3″.equals(showFlag)){%&gt;<br />
显示第三个报表的div，隐藏第一、二个报表的div<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item3″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById(”tab_item3″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}<br />
else{%&gt;<br />
显示第一个报表的div，隐藏第二、三个报表的div<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item1″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
document.getElementById(”tab_item1″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}%&gt;<br />
&lt;script language=”javascript”&gt;<br />
//重新定义第二个报表tab页的点击事件<br />
document.getElementById(’tab_item2′).onclick=function()<br />
{ //显示第二个报表的div，隐藏第一、三个报表的div<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById( “div_item2″ ).style.display = “”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
//更改tag标签字体的颜色</p>
<p>document.getElementById(”tab_item1″).className=”&#8221;;<br />
document.getElementById(”tab_item2″).className=”rq_curr”;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
//调用快逸自定义的tab页自定义函数<br />
_groupClicked(document.getElementById(’tab_item2′));<br />
document.getElementById(”showFlag”).value=2;<br />
}<br />
//重新定义第一个报表tab页的点击事件<br />
document.getElementById(’tab_item1′).onclick=function(){<br />
document.getElementById( “div_item1″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
document.getElementById(”tab_item1″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
_groupClicked(document.getElementById(’tab_item1′));<br />
document.getElementById(”showFlag”).value=1;<br />
}<br />
//重新定义第三个报表tab页的点击事件<br />
document.getElementById(’tab_item3′).onclick=function(){<br />
document.getElementById( “div_item3″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById(”tab_item3″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
_groupClicked(document.getElementById(’tab_item3′));<br />
document.getElementById(”showFlag”).value=3;<br />
}<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><strong>5，制作并发布报表组：</strong></p>
<p>制作一个有三个tab页的报表组，命名为group.rpg，然后命名上面制作的参数模板为group_arg.raq，最后用上面的jsp发布报表组。</p>
<p>点击查询按钮后报表组仍然停留在当前的tab页，而没有跳转的第一个tab页。</p>
<p>具体如下：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-002n308253b6.png" alt="" width="553" height="243" /></p>
<p>在报表中点击查询按钮后，页面停留在客户点击查询按钮时的tab页面的功能就实现了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2154.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何设置指定页码下指定行数的行(单元格)属性</title>
		<link>http://www.runqian.com.cn/archives/2152.html</link>
		<comments>http://www.runqian.com.cn/archives/2152.html#comments</comments>
		<pubDate>Tue, 31 Aug 2010 01:45:28 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[b.设计基础]]></category>

		<category><![CDATA[jsp]]></category>

		<category><![CDATA[分页报表]]></category>

		<category><![CDATA[属性设置]]></category>

		<category><![CDATA[指定页码]]></category>

		<category><![CDATA[表头]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2152</guid>
		<description><![CDATA[在分页报表中，我们想对指定页码下指定行设置一些属性，如：隐藏、前景色、背景色等，能否在报表中就可以判断并且实现呢... ]]></description>
			<content:encoded><![CDATA[<p><strong>需求背景</strong></p>
<p>在分页报表中，我们想对指定页码下指定行设置一些属性，如：隐藏、前景色、背景色等，能否在报表中就可以判断并且实现呢？</p>
<p>下面看一下如何实现这个功能。</p>
<p><strong>实现步骤</strong></p>
<p><strong>1：设计一张如下的报表</strong>：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-019p5d15987e.png" alt="" width="540" height="112" /></p>
<p>2：设置参数如下：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-020nf9360dc.png" alt="" width="554" height="95" /></p>
<p><strong>3：设置分页方式和每页行数：</strong></p>
<p><strong><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-021n5a6a0dd8.png" alt="" width="554" height="85" /></strong></p>
<p><strong>4：选中报表第二行，设置背景色表达式：</strong></p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-022n19555620.png" alt="" width="553" height="90" /></p>
<p>本例中计算页码是通过使用row()函数获得当前行号，而该报表有一个表头，这样的话数据区的行数应该是从2开始，所以这用了int((row()-2)/10+1)表达式求第几页；而表达式中(row()-2)%10其中10是分页记录条数，即该表达式是是求第几行的。</p>
<p><strong>5：将发布报表的jsp中设置<span>generateParamForm=”yes”，预览如下：</span></strong></p>
<p><span><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-023n7fc2ec6b.png" alt="" width="554" height="280" /></span></p>
<p><span>通过这个例子可以发现，我们不单能设置背景色，前景色、隐藏、显示值等都可以设置；还可以设置单元格的相关属性，操作和设置行属性类似。</span></p>
<p><span>说明：</span></p>
<p><span>1、该例可以直接适合按行分页的报表；<br />
2、若报表无报表头或含有多行报表头，行属性表达式要有所变化；<br />
3、如果设置行隐藏，后面的数据会补上一条到本页，使得本页数据仍为满页记录条数（最后一页除外），见下图：</span></p>
<p><span><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-024p130f3e44.png" alt="" width="553" height="279" /></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2152.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>linux下由于系统编码问题造成乱码的解决办法</title>
		<link>http://www.runqian.com.cn/archives/2150.html</link>
		<comments>http://www.runqian.com.cn/archives/2150.html#comments</comments>
		<pubDate>Mon, 30 Aug 2010 02:07:50 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[k.性能优化]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[locale]]></category>

		<category><![CDATA[乱码]]></category>

		<category><![CDATA[系统编码]]></category>

		<category><![CDATA[预处理]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2150</guid>
		<description><![CDATA[最近，有些客户遇到润乾报表应用在linux系统下乱码的问题，检查后都发现是客户的linux系统默认编码设置的不正确造成的。这种原因造成乱码的现象一般都是程序里面写死了的中文字符能正常... ]]></description>
			<content:encoded><![CDATA[<p>最近，有些客户遇到润乾报表应用在linux系统下乱码的问题，检查后都发现是客户的linux系统默认编码设置的不正确造成的。这种原因造成乱码的现象一般都是程序里面写死了的中文字符能正常展现，但是从数据库中取出来的或者从程序中读出来的中文字符就会出现乱码。</p>
<p>下面介绍一下由于linux系统编码设置不正确造成润乾报表应用乱码问题的解决办法。</p>
<p><strong>第一步：检查linux的系统编码。</strong></p>
<p>检查linux的系统编码，确定系统是否支持中文。在linux系统的终端中输入命令：locale，就会看到打印出的系统编码信息。如果打印出来的信息如下，则说明系统的编码不支持中文：</p>
<p>LANG=en_US.UTF-8<br />
LC_CTYPE=”en_US.UTF-8″<br />
LC_NUMERIC=”en_US.UTF-8″<br />
LC_TIME=”en_US.UTF-8″<br />
LC_COLLATE=”en_US.UTF-8″<br />
LC_MONETARY=”en_US.UTF-8″<br />
LC_MESSAGES=”en_US.UTF-8″<br />
LC_PAPER=”en_US.UTF-8″<br />
LC_NAME=”en_US.UTF-8″<br />
LC_ADDRESS=”en_US.UTF-8″<br />
LC_TELEPHONE=”en_US.UTF-8″<br />
LC_MEASUREMENT=”en_US.UTF-8″<br />
LC_IDENTIFICATION=”en_US.UTF-8″</p>
<p>支持中文的系统编码打印出来的信息应该如下图所示：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-017p13900708.png" alt="" width="554" height="409" /></p>
<p><strong>第二步：修改系统默认编码设置。</strong></p>
<p>如果发现系统编码不支持中文的话，那么就要修改系统编码，使其支持中文，这样润乾报表的中文在应用中才不会乱码。修改系统编码的代码如下：</p>
<p>/etc/sysconfig/i18n<br />
　　Controls the system font settings. The language variables are used in /etc/profile.d/lang.sh. An example i18n file:<br />
　　LANG=”en_US.GB18030″<br />
　　LANGUAGE=” en_US.GB18030: en_US.GB2312: en_US ”<br />
　　SUPPORTED=” en_US.GB18030: en_US:en:en_US.UTF-8:en_US:en”<br />
　　SYSFONT=”lat0-sun16″</p>
<p>系统的默认字符集是英文，如果要把字符集设置成支持中文的，可以通过设置这个文件来改变系统的默认字符集。</p>
<p>另外，也可在用户的环境变量或者用户的环境变量文件加入路径变量的声明：</p>
<p>在系统的预处理文件中声明，这样对整个系统起作用：</p>
<p>#vi /etc/profile</p>
<p>在文件尾加入：</p>
<p>LC_ALL=”zh_CN.GBK”<br />
export LANG=”zh_CN.GBK”</p>
<p>在用户的预处理文件中声明，对单独的用户起作用：</p>
<p>#vi /root/.bash_profile</p>
<p>在文件尾加入：</p>
<p>export LC_ALL=”zh_CN.GBK”<br />
export LANG=”zh_CN.GBK”</p>
<p>以上配置重新启动服务器使更改生效。</p>
<p><strong>第三步：查看修改过的系统默认编码。</strong></p>
<p>通过以上步骤的操作然后重启电脑，再在终端中输入命令：locale，然后就会看到系统的字符集信息变成了如下内容：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-018n72a4f877.png" alt="" width="554" height="409" /></p>
<p>经过以上修改，由于系统默认编码不支持中文造成的乱码就可以顺利解决了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2150.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>润乾报表中常用的测试环境JSP(下)</title>
		<link>http://www.runqian.com.cn/archives/2147.html</link>
		<comments>http://www.runqian.com.cn/archives/2147.html#comments</comments>
		<pubDate>Fri, 27 Aug 2010 01:51:13 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[j.安装部署]]></category>

		<category><![CDATA[all_prop.jsp]]></category>

		<category><![CDATA[jsp]]></category>

		<category><![CDATA[TestAWT.jsp]]></category>

		<category><![CDATA[图形环境]]></category>

		<category><![CDATA[环境编码]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2147</guid>
		<description><![CDATA[在报表的部署以及使用中，经常会遇到一些数据源或者环境配置方面的问题，本文中就提供了两个测试常用的JSP，可以在出现相关问题时用来进行测试... ]]></description>
			<content:encoded><![CDATA[<p>在报表的部署以及使用中，经常会遇到一些数据源或者环境配置方面的问题，本文中就提供了两个测试常用的JSP，可以在出现相关问题时用来进行测试。</p>
<p><span style="color: #ff0000;">TestAWT.jsp–测试服务器端图形环境的jsp。一些统计图无法展现等图形问题，都是由于图形环境没有配置正确造成的。</span></p>
<p>&lt;%@ page language=”java” contentType=”text/html; charset=GB18030″<br />
pageEncoding=”GB18030″%&gt;<br />
&lt;jsp:directive.page import=”com.runqian.report4.model.expression.graph.DrawBase”/&gt;<br />
&lt;jsp:directive.page import=”java.awt.Color”/&gt;<br />
&lt;!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=GB18030″&gt;<br />
&lt;title&gt;Insert title here&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
response.setHeader(”Cache-Control”,”no-cache”);<br />
try{<br />
new DrawBase(){<br />
public void draw(StringBuffer arg0){<br />
Color color =new Color(palette.getColor(0));<br />
g.setColor(color);<br />
g.drawRect(300,300,500,500);</p>
<p>}<br />
};<br />
%&gt;<br />
可以构建JAVA图形环境<br />
&lt;%<br />
}catch(Exception e){<br />
e.printStackTrace();<br />
%&gt;<br />
无法构建JAVA图形环境<br />
&lt;%<br />
}<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><span style="color: #ff0000;">all_prop.jsp–测试环境编码的jsp。系统环境的编码如果不正确，会导致中文字体或图形显示方块或乱码，用这个jsp可以测试出系统的环境编码。</span></p>
<p>&lt;%@ page language=”java” contentType=”text/html; charset=GB18030″<br />
pageEncoding=”GB18030″%&gt;<br />
&lt;jsp:directive.page import=”java.util.Properties”/&gt;<br />
&lt;jsp:directive.page import=”java.util.Set”/&gt;<br />
&lt;jsp:directive.page import=”java.util.Iterator”/&gt;<br />
&lt;!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=GB18030″&gt;<br />
&lt;title&gt;Insert title here&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;属性&lt;/td&gt;<br />
&lt;td&gt;值&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;%<br />
Properties props = System.getProperties();<br />
Set keys = props.keySet();</p>
<p>for(Iterator iter = keys.iterator();iter.hasNext();){<br />
String key = (String)iter.next();<br />
if(”file.encoding”.equalsIgnoreCase(key)){<br />
String value = props.getProperty(key);<br />
%&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;%=key %&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;%=value %&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;%<br />
}<br />
}<br />
%&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2147.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何在关联过滤中使用模糊匹配查询</title>
		<link>http://www.runqian.com.cn/archives/2145.html</link>
		<comments>http://www.runqian.com.cn/archives/2145.html#comments</comments>
		<pubDate>Mon, 23 Aug 2010 02:06:12 +0000</pubDate>
		<dc:creator>yanghe</dc:creator>
		
		<category><![CDATA[b.设计基础]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[关联过滤]]></category>

		<category><![CDATA[填报表]]></category>

		<category><![CDATA[模糊匹配]]></category>

		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2145</guid>
		<description><![CDATA[填报表的下拉数据集提供了关联过滤的功能，可以动态的根据某个单元格的值过滤下拉列表中的内容，一般大家都是用等号做完全匹配。具体可参考http://192.168.0.6:80/reportmis/RBP-11819文章... ]]></description>
			<content:encoded><![CDATA[<p>填报表的下拉数据集提供了关联过滤的功能，可以动态的根据某个单元格的值过滤下拉列表中的内容，一般大家都是用等号做完全匹配。具体可参考http://192.168.0.6:80/reportmis/RBP-11819文章。</p>
<p>其实，通过一些小技巧，就可以做到模糊匹配。</p>
<p>在实现功能之前，需要了解的一点是，因为这个关联过滤是在网页中完成的，所以它一定是一个javascript表达式。</p>
<p>尽管我们可以用报表中的表达式编辑器来编辑关联过滤表达式，但实际上它们都是报表自己的函数，无法被网页识别，我们要自己通过javascript来实现。</p>
<p>这里介绍一下用正则表达式实现模糊查询的方法。</p>
<p>比如要判断一个字符串中有没有”abc”这个字符串，正则表达式可以这样写：/.*abc.*/<br />
一个简单的模糊匹配代码如下：<br />
function testStirng1(str){<br />
var regex=/.*abc.*/; // 定义正则表达式对象<br />
return regex.test(str); // 判断是否匹配，返回布尔值<br />
}</p>
<p>由于这里我们可能要动态的替换abc，因此正则表达式对象也是动态创建的，上面的代码可修改为：<br />
function testString2(str1,str2){<br />
// eval可以将一个字符串当作javascript的表达式来执行<br />
// 这里借助它来实现动态的定义一个正则表达式<br />
var regex = eval(”/.*”+str1+”.*/”);<br />
return regex.test(str2);<br />
}</p>
<p>将上面两句代码和在一起，就变成了：eval(”/.*”+str1+”.*/”).test(str2)，这个就是我们要写在关联过滤表达式里面的内容。</p>
<p>接下来，就要对这个表达式来进行一下处理，使得报表可以识别并在解析时进行处理。</p>
<p><strong>第一步：替换引号。</strong></p>
<p>我们把双引号换成单引号：eval(’/.*’+str1+’.*/’).test(str2)</p>
<p>这么做是为了避免报表在解析表达式并生成html的时候出现混淆而导致错误，在具体编写表达式的时候要特别注意。</p>
<p><strong>第二步：将str1换成要关联的单元格的名字。</strong></p>
<p>将str2换成我们要关联的字段名，由于在javaScript中对数据类型不敏感，所以最好在字段名后面加上”.toString()”。</p>
<p>举例来说，现在我们有两个单元格A1和B1。其中A1是可写单元格；B1是下拉数据集，其中的col3字段要跟A1做模糊匹配。那么关联过滤的表达式为：<br />
eval(’/.*’+A1+’.*/’).test(col3.toString())</p>
<p>上面的给出的例子是任意位置匹配，其实我们还可以实现左匹配和右匹配：<br />
左匹配：eval(’/&#8217;+A1+’.*/’).test(col3.toString())<br />
右匹配：eval(’/.*’+A1+’/&#8217;).test(col3.toString())</p>
<p>最后，要注意的一点是对于扩展格，需要把单元格的名字用${}括起来，这点和一般的完全匹配规则一样。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2145.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何利用API实现行式报表后台导入excel数据入库</title>
		<link>http://www.runqian.com.cn/archives/2143.html</link>
		<comments>http://www.runqian.com.cn/archives/2143.html#comments</comments>
		<pubDate>Fri, 20 Aug 2010 02:10:44 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[l.编程接口]]></category>

		<category><![CDATA[API接口]]></category>

		<category><![CDATA[excel]]></category>

		<category><![CDATA[代码]]></category>

		<category><![CDATA[后台导入]]></category>

		<category><![CDATA[数据入库]]></category>

		<category><![CDATA[行式报表]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2143</guid>
		<description><![CDATA[润乾报表提供了excel导入页面后入库的功能,丰富了用户导入excel的方式。对于普通填报表,润乾报表提供了直接后台入库和导入页面入库的方式,本文介绍如何利用润乾报表提供的API接口在行式填... ]]></description>
			<content:encoded><![CDATA[<p>润乾报表提供了excel导入页面后入库的功能,丰富了用户导入excel的方式。对于普通填报表,润乾报表提供了直接后台入库和导入页面入库的方式,那么在行式填报表中,如何实现后台导入excel入库呢?</p>
<p>用润乾报表提供的API接口,就可以完成这个功能。</p>
<p>下面是示例代码：</p>
<p><%@ page contentType=”text/html;charset=GBK” %><br />
<%@ page import=”com.runqian.report4.usermodel.*”%><br />
<%@ page import=”com.runqian.base4.util.*”%><br />
<%@ page import=”com.runqian.report4.model.*”%><br />
<%@ page import=”com.runqian.report4.util.*”%><br />
<%@ page import=”com.runqian.report4.cache.CacheManager”%><br />
<%@ page import=”java.io.*”%></p>
<p><%@ page import=”com.runqian.report4.dataset.DataSet”%><br />
<%@ page import=”com.runqian.report4.dataset.SQLDataSetFactory”%><br />
<%@ page import=”com.runqian.report4.view.olap.OlapUtils”%><br />
<%@ page import=”com.runqian.report4.view.excel.ExcelReport”%><br />
<%@ page import=”java.sql.Connection”%><br />
<%@ page import=”java.sql.Driver”%><br />
<%@ page import=”java.sql.DriverManager”%><br />
<%@page import=”com.runqian.report4.ide.ExcelImporter”%><br />
<%@page import=”com.runqian.report4.usermodel.input.InputProperty”%><br />
<%@page import=”com.runqian.report4.input.DataSaver”%><br />
<%@page import=”com.runqian.report4.model.engine.ExtCellSet”%><br />
<%@page import=”com.runqian.report4.model.engine2.RowReport”%><br />
<%@page import=”com.runqian.report4.input.RowReportSaver”%><br />
<%@page import=”java.text.SimpleDateFormat”%><br />
<%@page import=”com.runqian.base4.resources.FormatUtils”%><br />
<%@page import=”java.util.Locale”%><br />
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”><br />
<html><br />
<head><br />
</head></p>
<p><body></p>
<p><%<br />
//设置报表路径<br />
String reportFile = “D:\\testupdate.raq”;<br />
Context cxt = new Context();<br />
ReportDefine rd = null;<br />
try {<br />
//读取报表模版定义<br />
rd = (ReportDefine) ReportUtils.read(reportFile);<br />
} catch (Exception e) {<br />
// TODO Auto-generated catch block<br />
e.printStackTrace();<br />
}<br />
System.out.println(”报表读取完毕===================================”);<br />
//计算报表<br />
Engine engine = new Engine(rd, cxt);<br />
IReport iReport = engine.calc();<br />
//将计算完的报表转换成行式报表对象<br />
RowReport rr = (RowReport)iReport;<br />
//第几行是主扩展行<br />
String did = rr.getDetailID( 1 );<br />
//定义报表保存的参数<br />
SimpleDateFormat dateF = new SimpleDateFormat( FormatUtils.getDateFormat( Locale.getDefault() ) );<br />
SimpleDateFormat timeF = new SimpleDateFormat( FormatUtils.getTimeFormat( Locale.getDefault() ) );<br />
SimpleDateFormat datetimeF = new SimpleDateFormat( FormatUtils.getDatetimeFormat( Locale.getDefault() ) );<br />
//设置excel路径<br />
String excelFile = “D:\\test1500.xls”;<br />
//生成excel导入对象<br />
ExcelImporter ei = new ExcelImporter(excelFile);<br />
//得到excel中的第一个sheet的对象<br />
IReport excelReport = ei.getReport(0);<br />
//构造数据保存对象<br />
RowReportSaver rowSaver = new RowReportSaver(rr, null, cxt);<br />
//读入excel文件及其数据<br />
//逐行逐列把excel数据写入填报表<br />
for(int i=1;i<=excelReport.getRowCount();i++){<br />
//先插入一行,这里是不定行导入excel数据<br />
Area area = rr.insertDetail( did );<br />
//循环取得excel单元格<br />
for(int j=1;j<=iReport.getColCount();j++){<br />
INormalCell iExcelCell=excelReport.getCell(i, (short)j);</p>
<p>if( iExcelCell == null ) continue;<br />
String svalue = “”;<br />
//得到单元格的值<br />
Object value = iExcelCell.getValue();<br />
if( value != null )<br />
svalue = value.toString();<br />
//把填报值保存到数据保存对象中<br />
rowSaver.setCellInputValue( area.getBeginRow(), (short)j, svalue, dateF, timeF, datetimeF );</p>
<p>}</p>
<p>}<br />
//执行保存<br />
rowSaver.save();<br />
out.print(”数据保存成功”);</p>
<p>%></p>
<p></body><br />
</html></p>
<p>通过这样的方式，我们就可以利用API来对行式填报表进行后台数据直接入库的功能了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2143.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>润乾报表中常用的测试环境JSP(上)</title>
		<link>http://www.runqian.com.cn/archives/2141.html</link>
		<comments>http://www.runqian.com.cn/archives/2141.html#comments</comments>
		<pubDate>Thu, 19 Aug 2010 01:58:37 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[j.安装部署]]></category>

		<category><![CDATA[jsp]]></category>

		<category><![CDATA[字体]]></category>

		<category><![CDATA[数据源]]></category>

		<category><![CDATA[测试]]></category>

		<category><![CDATA[部署]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2141</guid>
		<description><![CDATA[在报表的部署以及使用中,经常会遇到一些数据源或者环境配置方面的问题，本文提供了两个测试常用的JSP,可以在出现相关问题时用来进行测试... ]]></description>
			<content:encoded><![CDATA[<p>在报表的部署以及使用中,经常会遇到一些数据源或者环境配置方面的问题，本文提供了两个测试常用的JSP,可以在出现相关问题时用来进行测试。</p>
<p>data_source_test.jsp–测试数据源，可以检测数据源是否被正确配置，以及是否可以连接。</p>
<p><%@ page contentType=”text/html;charset=GBK” %><br />
<%@ page import=”com.runqian.report4.usermodel.*”%><br />
<%@ page import=”com.runqian.base4.util.*”%><br />
<%@ page import=”com.runqian.report4.model.*”%><br />
<%@ page import=”com.runqian.report4.util.*”%><br />
<%@ page import=”com.runqian.report4.cache.CacheManager”%><br />
<%@ page import=”java.io.*”%></p>
<p><%@ page import=”com.runqian.report4.dataset.DataSet”%><br />
<%@ page import=”com.runqian.report4.dataset.SQLDataSetFactory”%><br />
<%@ page import=”com.runqian.report4.view.olap.OlapUtils”%><br />
<%@ page import=”com.runqian.report4.view.excel.ExcelReport”%><br />
<%@ page import=”java.sql.Connection”%><br />
<%@ page import=”java.sql.Driver”%><br />
<%@ page import=”java.sql.DriverManager”%><br />
<%@page import=”com.runqian.report4.ide.ExcelImporter”%><br />
<%@page import=”com.runqian.report4.usermodel.input.InputProperty”%><br />
<%@page import=”com.runqian.report4.input.DataSaver”%><br />
<%@page import=”com.runqian.report4.model.engine.ExtCellSet”%><br />
<%@page import=”com.runqian.report4.model.engine2.RowReport”%><br />
<%@page import=”com.runqian.report4.input.RowReportSaver”%><br />
<%@page import=”java.text.SimpleDateFormat”%><br />
<%@page import=”com.runqian.base4.resources.FormatUtils”%><br />
<%@page import=”java.util.Locale”%><br />
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”><br />
<html><br />
<head><br />
</head></p>
<p><body></p>
<p><%<br />
//设置报表路径<br />
String reportFile = “D:\\testupdate.raq”;<br />
Context cxt = new Context();<br />
ReportDefine rd = null;<br />
try {<br />
rd = (ReportDefine) ReportUtils.read(reportFile);<br />
} catch (Exception e) {<br />
// TODO Auto-generated catch block<br />
e.printStackTrace();<br />
}<br />
System.out.println(”报表读取完毕===================================”);<br />
//计算报表<br />
Engine engine = new Engine(rd, cxt);<br />
IReport iReport = engine.calc();<br />
RowReport rr = (RowReport)iReport;<br />
String did = rr.getDetailID( 1 ); //第几行是主扩展行<br />
SimpleDateFormat dateF = new SimpleDateFormat( FormatUtils.getDateFormat( Locale.getDefault() ) );<br />
SimpleDateFormat timeF = new SimpleDateFormat( FormatUtils.getTimeFormat( Locale.getDefault() ) );<br />
SimpleDateFormat datetimeF = new SimpleDateFormat( FormatUtils.getDatetimeFormat( Locale.getDefault() ) );<br />
System.out.println(”报表计算完毕@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@”);<br />
String excelFile = “D:\\test1500.xls”;<br />
ExcelImporter ei = new ExcelImporter(excelFile);<br />
IReport excelReport = ei.getReport(0);<br />
RowReportSaver rowSaver = new RowReportSaver(rr, null, cxt); //构造数据保存对象<br />
System.out.println(” 获取Excel完毕&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;”);<br />
//读入excel文件及其数据<br />
for(int i=1;i<=excelReport.getRowCount();i++){ ////逐行逐列把excel数据写入填报表<br />
Area area = rr.insertDetail( did );<br />
//for(int j=1;j<=iReport.getColCount();j++){<br />
//INormalCell iExcelCell=excelReport.getCell(i, (short)j); //取得excel单元格</p>
<p>//if( iExcelCell == null ) continue;<br />
//String svalue = “”;<br />
//Object value = iExcelCell.getValue();<br />
//if( value != null ) svalue = value.toString();</p>
<p>/* 校验过程 star*/<br />
//if((short)j==1 &#038;&#038; svalue.length()>3){<br />
//list.add((”第”+sheetNum+”页的第”+i+”行”+”第”+(short)j+”列的值”+svalue+”字符长度大于3!”));<br />
//throw new Exception(”校验失败”);<br />
//}</p>
<p>/* 校验过程 end*/</p>
<p>//}<br />
for(int j=1;j<=iReport.getColCount();j++){<br />
INormalCell iExcelCell=excelReport.getCell(i, (short)j); //取得excel单元格</p>
<p>if( iExcelCell == null ) continue;<br />
String svalue = “”;<br />
Object value = iExcelCell.getValue();<br />
if( value != null ) svalue = value.toString();</p>
<p>rowSaver.setCellInputValue( area.getBeginRow(), (short)j, svalue, dateF, timeF, datetimeF );</p>
<p>}</p>
<p>}</p>
<p>System.out.println(”设置更新属性完毕%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%”);</p>
<p>rowSaver.save(); //执行保存<br />
out.print(”数据保存成功”);</p>
<p>%></p>
<p></body><br />
</html></p>
<p>enum_font.jsp–列出java环境的字体，当发现统计图里面的字体不正确时，可通过这个jsp检测系统中是否有统计图中使用的字体。</p>
<p><%@ page language=”java” pageEncoding=”GBK”%><br />
<jsp:directive.page import=”java.awt.GraphicsEnvironment”/><br />
<%<br />
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();<br />
String[] fontNames= ge.getAvailableFontFamilyNames();<br />
%><br />
<html><br />
<head><br />
</head><br />
<body style=”font-size: 14px”><br />
当前Java环境支持的字体列表<br />
<dir><br />
<%<br />
for(int i=0;i<fontNames.length;i++)<br />
out.println(”
<li>”+fontNames[i]);<br />
%><br />
</dir><br />
</body><br />
</html></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2141.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>将润乾报表继承到开发环境中（下）</title>
		<link>http://www.runqian.com.cn/archives/2138.html</link>
		<comments>http://www.runqian.com.cn/archives/2138.html#comments</comments>
		<pubDate>Sun, 15 Aug 2010 09:00:40 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[j.安装部署]]></category>

		<category><![CDATA[jsp]]></category>

		<category><![CDATA[reportFile文件]]></category>

		<category><![CDATA[WebRoot]]></category>

		<category><![CDATA[发布]]></category>

		<category><![CDATA[新工程]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2138</guid>
		<description><![CDATA[很多刚刚接触润乾报表的客户在使用过程中，会遇到一个比较头疼的问题，就是如何将制作好的报表继承到自己的开发环境中。下面以myEclipse为例，搭建一个简单的集成润乾报表的开发环境... ]]></description>
			<content:encoded><![CDATA[<p>在上一篇文章中，我们已经将整个报表应用成功的集成到了myEclipse平台下。现在来看看如何将一个最简单的报表发布到新工程中。首先来制作一张简单的润乾报表。如下图所示，一个四行四列的名为runqian的raq文件：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-001p17a4dc63.png" alt="" width="331" height="132" /></p>
<p>在工程跟目录WebRoot下面建立一个名为reportFile的文件夹，将制作好的raq文件拷贝到里面去。之后在WebRoot下面建立两个jsp文件。一个名为mc.jsp和myError.jsp内容如下：</p>
<p>mc.jsp:<br />
&lt;%@ page contentType=”text/html;charset=GBK” %&gt;<br />
&lt;%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %&gt;<br />
&lt;html&gt;<br />
&lt;body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0&gt;<br />
&lt;table align=left&gt;<br />
&lt;tr&gt;&lt;td&gt;<br />
&lt;report:html name=”report1″<br />
srcType=”file”<br />
reportFileName=”runqian.raq”<br />
funcBarLocation=”top”<br />
exceptionPage=”/myError.jsp”<br />
/&gt;<br />
&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
myError.jsp:<br />
&lt;%@ page contentType=”text/html;charset=GBK” %&gt;<br />
&lt;html&gt;<br />
&lt;title&gt;报表异常信息&lt;/title&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
Exception e = ( Exception ) request.getAttribute( “exception” );<br />
out.println( “&lt;div style=’color:red’&gt;” + e.getMessage() + “&lt;/div&gt;” );<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>分别建立好两个jsp之后,将授权文件拷贝到工程目录的classess文件夹下，在X:\apache-tomcat-6.0.20\webapps\runqian\WEB-INF\classes（以tomcat为例，X为按照目录）。注意更改授权文件名为runqianWindowServer.lic即可。工程发不到服务器中，可以在自己的服务器上运行报表。如下图所示即为自己的服务器运行的润乾报表啦：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-002n1fb22de7.png" alt="" width="340" height="187" /></p>
<p>报表的支持文件在不同的操作系统和开发环境下的部署都大同小异,大家可以以此为参考配置报表。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2138.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
