Java 如何使用DynamicAsperAPI在pdf报告的页脚中显示图像?

Java 如何使用DynamicAsperAPI在pdf报告的页脚中显示图像?,java,jasper-reports,dynamic-jasper,Java,Jasper Reports,Dynamic Jasper,我正在使用DynamicAsperAPI开发pdf报告 根据要求,我必须在页眉和页脚显示一个标志。我可以使用DynamicReportBuilder.addImageBanner方法在标题处显示徽标。但我没有找到在页脚添加图像的方法 我在动态jasper论坛中看到了一些关于这个问题的帖子,其中提到的一项工作是使用pageFooter band创建一个jrxml模板 我试过了,但没有成功。我得到了以下例外: org.xml.sax.SAXParseException:不允许处理指令目标匹配“[xX

我正在使用DynamicAsperAPI开发pdf报告

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

我在动态jasper论坛中看到了一些关于这个问题的帖子,其中提到的一项工作是使用pageFooter band创建一个jrxml模板

我试过了,但没有成功。我得到了以下例外:

org.xml.sax.SAXParseException:不允许处理指令目标匹配“[xX][mM][lL]”

下面是生成报告的代码

  • 创建DynamicReport对象
  • 创建jasperPrint对象
  • 调用基于格式类型创建报表的方法。这里我必须传递jasperPrint对象,它具有jrxml表示、目标文件位置和报告格式类型
  • /。。。
    DynamicReport DynamicReport=buildDynamicReport(reportTemplate,grpFields);
    //构建jrxml
    JasperPrint-JasperPrint=buildJRXML(dynamicReport,dataSource,reportFormat); //将报告导出为特定的目标格式
    exportReport(jasperPrint、targetReportFile、reportFormat); // ... 专用DynamicReport buildDynamicReport(模板报告模板, 向量groupFields)引发ServiceException{ /**生成DynamicReport对象的代码*/ dynamicReportBuilder.setTemplateFile(“jrxml/report footer.jrxml”); DynamicReport DynamicReport=dynamicReportBuilder.build(); 返回动态报告; }

    任何帮助都将不胜感激。

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

    一种解决方法是使用自定义布局管理器实现—扩展ClassClayOutManager并重写applyBanners()方法


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

    一种解决方法是使用自定义布局管理器实现—扩展ClassClayOutManager并重写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);