2012-12-20 130 views
0

我正在开发使用API DynamicJasper的一个 PDF 报告如何使用DynamicJasper API在页脚中显示pdf报告图像?

按规定我显示在页脚在头部中的一个标识等。我可以通过使用DynamicReportBuilder.addImageBanner方法在标题上显示徽标。但我没有找到在页脚添加图片的方法。

我看到了关于这个问题的动态碧玉论坛的一些线程,一个工作围绕提到有创造JRXML模板与pageFooter带。

我试过了,但没有解决。我有以下异常:

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; 
} 

任何帮助将升值。

回答

2

由于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); 
相关问题