2016-09-12 23 views
0

最近Jasper Report APIを4.5.1から6.3にアップグレードしました。 4.5.1では、レポートはHTML、PDF形式にエクスポートされます。 HTMLレポートの場合、子レポートにドリルダウンする機能があります。要求パラメータを処理するためのリンクをカスタマイズし、子レポートを開く前処理は、を作成し、ハイパーリンクを処理するためにJRHyperlinkProducerMapFactoryを登録しました。Jasper Report 6.3ハイパーリンク拡張

拡張機能は正しく登録されていますが、使用されていません。 Jasper Report 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> 

何か不足していますか?何か間違いがある場合、私はそれを見つけ出すために親切に手伝っています。

+0

設定の輸出業者のための新しいAPIがある場合、バージョン5.5.2から始まるバグがJasperReportsの中に存在しているようです導入されました。私たちはそれを認識しており、すぐにそれを修正します。しかし、それまでは回避策がありますが、HTMLエクスポータの作成方法によって異なります。正確な回答を提供できるように、輸出業者をインスタンス化するためのコードを投稿できますか? – Narcis

答えて

0

入力のためにNarcisに感謝します。

Jasper Report 6.3.0のソースコードを確認し、ハイパーリンクレジストリの置き換え方法を理解しようとしました。このための回避策を見つけました。それが他の人に役立つことを願っています。ハイパーリンクの拡張機能を登録するためのコードスニペットを次に示します。

輸出

AbstractHtmlExporter<HtmlReportConfiguration,HtmlExporterConfiguration> exporter = new HtmlExporter(); 

SimpleHtmlReportConfiguration htmlReportConfig = new SimpleHtmlReportConfiguration(); 

htmlReportConfig.setHyperlinkProducerFactory(HyperlinkExtensionsRegistryFactory.hyperlinkProducerFactory()); 

exporter.setConfiguration(htmlReportConfig); 

HyperlinkExtensionsRegistryFactory.hyperlinkProducerFactory()

public JRHyperlinkProducerFactory hyperlinkProducerFactory() { 
    JRHyperlinkProducerMapFactory producerFactory = new JRHyperlinkProducerMapFactory(); 
    producerFactory.addProducer("ReportExecution", new <Class_implements_JRHyperlinkProducer>()); 
    producerFactory.addProducer("Custom", new <Class_implements_JRHyperlinkProducer>()); 
    return producerFactory; 
} 
関連する問題