簡體   English   中英

如何使用DynamicJasper API在Footer中為pdf報告顯示圖像?

[英]How to show image in Footer for pdf report using DynamicJasper API?

我正在使用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;
}

任何幫助將不勝感激。

由於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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM