当前位置: 代码迷 >> ASP >> Jaspersoft点滴记要
  详细解决方案

Jaspersoft点滴记要

热度:318   发布时间:2012-11-01 11:11:32.0
Jaspersoft点滴记录

JasperServer

?

Tomcat的Cannot serialize session attribute XXX? for问题
Context.xml中增加<Manager className="org.apache.catalina.session.PersistentManager"?saveOnRestart="false"/>用来停止保存Session资源

?

JasperServer的汉化

复制jasperserver\WEB-INF\bundles\jasperserver_messages.properties为jasperserver_messages_zh.properties修改里面的属性为中文后,用jdk工具native2ascii.exe进行转码

中文问题

导出pdf的时候需要将iTextAisan.jar放在lib文件夹中,然后指定PDF导出的字体

Pdf Font Name :?STSong-Light

Pdf Encoding :?UniGB-UCS2-H (Chinese Simplified)

?

导出Excel没有表头

修改WEB-INF/classes/jasperreports.properties文件,增加下面内容:

# keep the first column header on export

net.sf.jasperreports.export.xls.exclude.origin.keep.first.band.1=pageHeader

net.sf.jasperreports.export.xls.exclude.origin.keep.first.band.2=columnHeader

?

修改导出列表

由于导出CSV文件乱码,想将其从列表中移除,修改WEB-INF/flows/viewReportBeans.xml

编辑exporterConfigMap配置,将CSV配置注释掉就OK。

?

日期格式化(修改日期格式为yyyy-MM-dd格式)

1.修改jasperserver\WEB-INF\bundles\jasperserver_config.properties,这样InputControl中的日期控件的格式会做相应的更改。

2.修改jasperserver\WEB-INF\applicationContext.xml文件对configurationBean定义的日期格式,这样显示查询结果会做相应的更改

?

Title的更改

文件位置:jasperserver\WEB-INF\decorators\decorator.jsp,修改页面的Title标签即可

?

iReport


小数点设置

使用iReport的时候通常要定义变量, 并且经过一系列的计算得到最终的值。但我们需要最终的值只保留两位小数,因此需要对其进行设置。比较简单的是让它返回BigDecimal对象,在Variable Expression中这样设置:(new BigDecimal(计算公式)).setScale(2,BigDecimal.ROUND_HALF_UP)

?

SubReport

添加Subreport时如果需要依赖输入参数,那么需要在Mainreport中的Subreport属性面板中设置。上传到Jasperserver中主报表访问子报表需要用repo路径,如:

<subreportExpression class="java.lang.String"><![CDATA["repo:subreport"]]></subreportExpression>如果有问题可继续尝试在subreport前增加/

?

Web端导出Excel

在Web端展示的时候,使用的是struts2-jasperreports-plugin这样的一个插件。然而在Chrome中导出Excel的时候遇到了问题:文件的后缀不是.xls而是.action,这是由于没有对Response设置Header信息的缘故。所以需要在struts2的xml文件中指定这个插件的documentName属性。这样插件会对Response设置Header和documentName指定的文件名,文件名的后缀它会读取format指定的格式,这里是XLS。

Struts2的result信息配置如下:

?

<result name="exportOrdersXLS" type="jasper">
        <param name="location">/jaspers/orders.jasper</param>
        <param name="connection">connection</param>
        <param name="reportParameters">reportParameters</param>
        <param name="exportParameters">exportParameters</param>
        <param name="format">XLS</param>
        <param name="documentName">Orders</param>
        <param name="imageServletUrl"><![CDATA[/image?image=]]></param>
</result>
?

iReport中获取JasperServer登录的用户和权限

?

In a report define the follwing parameters:
 
<!-- this is passed in automatically by JasperServer -->
  <parameter name="LoggedInUser" class="com.jaspersoft.jasperserver.api.metadata.user.domain.User"/>
<!-- these are dependent parameters -->
  <parameter name="LoggedInUserRoles" class="java.util.Collection">
    <defaultValueExpression><![CDATA[$P{LoggedInUser}.getRoles()]]></defaultValueExpression>
  </parameter>
  <parameter name="LoggedInUserRolesAsStrings" class="java.util.Collection">
    <defaultValueExpression><![CDATA[convert $P{LoggedInUserRoles} to collection of strings - Gtroovy or Java Expression, or scriptlet method call]]></defaultValueExpression>
  </parameter>
 
<!-- use JasperReports $X to get the role name values into an IN clause -->
    <queryString>
        <![CDATA[select * from blah
where $X{IN, role_name, LoggedInUserRolesAsStrings} ]]>
    </queryString>

?国外网站给的解决方案,但是需要用scriptlet增加对权限的解析,如:

public class UserRolesScriptlet extends JRDefaultScriptlet {

    public String extractAllRoles(User js_user) {
        StringBuffer roles = new StringBuffer();
        Iterator role_iter = js_user.getRoles().iterator();
        while (role_iter.hasNext()) {
            roles.append(((Role) role_iter.next()).getRoleName()+",");
        }
        String roles_str = roles.toString();
        return roles_str.substring(0,roles_str.length()-1);
    }

}
?

?

?

?

?

?