DynamicJasper Excel и HyperLinks - PullRequest
       33

DynamicJasper Excel и HyperLinks

0 голосов
/ 06 февраля 2012

Кому-нибудь удалось добавить гиперссылку на ячейку Excel с помощью DynamicJasper?

В 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), это, похоже, не работает, так как evaluate() никогда не вызывается, когда я выхожу в Excel.

Я также пыталсяустановка литерала =HYPERLINK("www.test.com") ..... опять не радость.

немного застрял сейчас.

1 Ответ

0 голосов
/ 18 марта 2013

Полагаю, вы уже нашли решение для этого. Однако отвечая здесь, чтобы это могло помочь другим. Я не смог найти конкретное исправление, упомянутое как часть примечаний к выпуску, но это, кажется, прекрасно работает с 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.

...