DynamicJasper Excel和HyperLinks

时间:2012-02-06 15:28:19

标签: excel hyperlink jasper-reports dynamic-jasper

有没有人设法使用DynamicJasper添加指向excel单元格的超链接?

在src中有测试显示如何做到这一点....但我担心它们仅用于html输出而不是xls。

EG

DJHyperLink djlink = new DJHyperLink();
    djlink.setExpression(new StringExpression() {
        public Object evaluate(Map fields, Map variables, Map parameters) {             
            return "http://linkInImage.com?param=" + variables.get("REPORT_COUNT");
        }
    });
    djlink.setTooltip(new LiteralExpression("I'm a literal tootltip"));     

然后AbstractColumn.setLink(djlink),这似乎不起作用,因为当我输出到excel时,evaluate()永远不会被调用。

我也试过设置文字=HYPERLINK("www.test.com") .....再没有快乐。

现在有点卡住了。

1 个答案:

答案 0 :(得分:0)

我相信你现在必须找到解决方案。但是在这里回答它可以帮助别人。我找不到作为发行说明的一部分提到的具体修复,但这似乎适用于DJ 4.0.3 release

我在AbstractLayoutManager中看到了这个,

if (column.getLink() != null) {
    String name = getDesign().getName() + "_column_" + getReport().getColumns().indexOf(column);
    HyperLinkUtil.applyHyperLinkToElement((DynamicJasperDesign) getDesign(),column.getLink(),textField,name);
}

..最终调用导航到ExpressionUtil :: createCustomExpressionInvocationText2(),

public static String createCustomExpressionInvocationText2(String customExpName) {

    String fieldsMap = getTextForFieldsFromScriptlet();
    String parametersMap = getTextForParametersFromScriptlet();
    String variablesMap = getTextForVariablesFromScriptlet();

    String stringExpression = "(("+CustomExpression.class.getName()+")$P{REPORT_PARAMETERS_MAP}.get(\""+customExpName+"\"))."
        +CustomExpression.EVAL_METHOD_NAME+"( "+ fieldsMap +", " + variablesMap + ", " + parametersMap +" )";

    return stringExpression;
}

当我尝试使用您的代码时,它适用于HTML和Excel。