【问题标题】:How to show image in Footer for pdf report using DynamicJasper API?如何使用 DynamicJasper API 在 pdf 报告的页脚中显示图像?
【发布时间】:2012-12-20 09:39:50
【问题描述】:

我正在使用 DynamicJasper API 开发 pdf 报告。

根据要求,我必须在页眉和页脚显示一个徽标。我可以使用 DynamicReportBuilder.addImageBanner 方法在标题处显示徽标。但我没有找到在页脚添加图片的方法。

我在 dynamic-jasper 论坛中看到了一些关于这个问题的帖子,其中提到的一个解决方法是使用 pageFooter 带创建一个 jrxml 模板。

我试过这个,但没有成功。我得到以下异常:

org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed

以下是生成报告的代码。

  1. 创建一个dynamiceReport对象
  2. 创建一个jasperPrint对象
  3. 调用基于格式类型创建报告的方法。这里我必须传递 jasperPrint 对象,该对象具有 jrxml 表示、目标文件位置和报告格式类型。
// ...
    DynamicReport dynamicReport = buildDynamicReport(reportTemplate, grpFields);

    // build jrxml <br/>
    JasperPrint jasperPrint = buildJRXML(dynamicReport, dataSource, reportFormat);

    // export the report into specific target format <br/>
    exportReport(jasperPrint, targetReportFile, reportFormat);
// ...

private DynamicReport buildDynamicReport(Template reportTemplate,
                                         Vector<String[]> groupFields) throws ServiceException {
    /** code to generate DynamicReport object. */
    dynamicReportBuilder.setTemplateFile("jrxml/report-footer.jrxml");
    DynamicReport dynamicReport = dynamicReportBuilder.build();

    return dynamicReport;
}

任何帮助将不胜感激。

【问题讨论】:

    标签: java jasper-reports dynamic-jasper


    【解决方案1】:

    由于 dynamicjasper 的 ClassicLayoutManager 类默认情况下仅将所有图像横幅应用于标题带,因此似乎没有直接的方法来实现这一点。

    一种解决方法是使用自定义布局管理器实现 - 扩展 ClassicLayoutManager 并覆盖 applyBanners() 方法。

    public class CustomLayoutManager extends ClassicLayoutManager {
    
        protected void applyBanners() {
            super.applyBanners(); //let the ClassicLayoutManager apply header banners
    
            // explicitly add banner to footer band..
            JRDesignBand pageFooter = (JRDesignBand)getDesign().getPageFooter();
    
            // if there is no footer band we create one
            if(pageFooter == null) {
                pageFooter = new JRDesignBand();
                getDesign().setPageFooter(pageFooter);
            }
    
            Vector<ImageBanner> vImageBanner = new Vector<ImageBanner>();
            vImageBanner.add(new ImageBanner("yourlogoimage.ext", 120, 50, ImageBanner.ALIGN_LEFT));
    
            applyImageBannersToBand(pageFooter, vImageBanner, null);
        }
    }
    

    然后在生成报告时使用自定义类..

    JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(dynamicReport, new CustomLayoutManager(), parameters);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多