Недавно я обновил API отчетов Jasper от 4.5.1 до 6.3. С 4.5.1 отчеты экспортируются в формат HTML, PDF. Для отчетов HTML есть возможность переходить к дочернему отчету. Чтобы настроить ссылки для обработки параметров запроса и предварительной обработки открытия дочернего отчета, создали ExtensionRegistryFactory
и зарегистрировали JRHyperlinkProducerMapFactory
для обработки гиперссылок.Jasper Report 6.3 Расширение гиперссылки
Я заметил, что расширение зарегистрировано правильно, но оно не привыкает. Проверьте исходный код отчета Jasper 6.3 и попытайтесь отладить причину, затем заметили, что метод: net.sf.jasperreports.engine.JRAbstractExporter.getHyperlinkProducer(JRPrintHyperlink)
не возвращает JRHyperlinkProducer
.
Вот код ExtensionsRegistryFactory
:
public class HyperlinkExtensionsRegistryFactory implements ExtensionsRegistryFactory
{
@Override
public ExtensionsRegistry createRegistry(String registryId, JRPropertiesMap properties)
{
return new ExtensionsRegistry()
{
@Override
public List getExtensions(Class extensionType)
{
if (extensionType.equals(JRHyperlinkProducerFactory.class))
{
JRHyperlinkProducerMapFactory producerFactory = new JRHyperlinkProducerMapFactory();
producerFactory.addProducer("ReportExecution", new RemoteExecutionHyperlinkProducer());
producerFactory.addProducer("Custom", new ExpandCollapseHyperlinkProducer());
return Arrays.asList(producerFactory);
}
return null;
}
};
}
public static class RemoteExecutionHyperlinkProducer implements JRHyperlinkProducer
{
@Override
public String getHyperlink(JRPrintHyperlink hyperlink)
{
return [custom link generation logic];
}
}
public static class ExpandCollapseHyperlinkProducer implements JRHyperlinkProducer
{
@Override
public String getHyperlink(JRPrintHyperlink hyperlink)
{
return [custom link generation logic];
}
}
}
С помощью этого класса, создали запись для jasperreports_extension.properties
файла. Вот его содержание:
net.sf.jasperreports.extension.registry.factory.HyperlinkExtensionFactory=<fully_qualified_path_to_HyperlinkExtensionsRegistryFactory>
Я ничего не пропустил? Если есть какая-то ошибка, которую я делаю, то любезно помогите узнать ее.
Кажется, что есть ошибка в JasperReports, начиная с версии 5.5.2, когда новый API для настройки экспортеров имеет был введен. Мы это осознаем и скоро исправим. Тем не менее, до тех пор, для этого есть обходной путь, но это зависит от того, как вы создаете своего экспортера HTML. Не могли бы вы отправить код для создания экземпляра вашего экспортера, чтобы я мог дать точный ответ? – Narcis