当前位置: 首页 > 知识库问答 >
问题:

如何使用DynamicJasper API在PDF报告的页脚中显示图像?

齐坚成
2023-03-14

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

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

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

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

<代码>组织。xml。萨克斯。SAXParseException:不允许处理指令目标与“[xX][mM][lL]”匹配

以下是生成报告的代码。

  1. 创建DynamiceReport对象
  2. 创建jasperPrint对象
  3. 调用基于格式类型创建报告的方法。这里我必须传递jasperPrint对象,它具有jrxml表示、目标文件位置和报告格式类型。
java prettyprint-override">// ...
    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;
}

任何帮助将不胜感激。

共有1个答案

曾山
2023-03-14

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

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

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);
 类似资料:
  • 如何在jasper子报告中显示当前页码?我只做了第一页,变量如下:$V{page_NUMBER}和“(”$V{page_COUNT}“)”,但我们如何在所有子报告中显示?

  • 问题内容: 我想在碧玉报告中显示图像。我在.jrxml上具有以下内容: 图像logo.jpg与.jrxml位于同一目录中。只是说这对我不起作用。我在Google上搜索了一下,发现jasper报告将我放在.jrxml中的内容视为到JVM目录的相对路径,并且要更改此设置,我需要将返回文件的FileResolver作为“ REPORT_FILE_RESOLVER”参数传递。因此,我在.java中进行了以

  • 我正在使用jasperreport-4.5.0生成报告。它正在正确地生成报告。但是如果我的数据库中有大量数据,那么报告vl会显示在不同的页面中。所以我的要求是,如果我的报告有12页,那么我想显示12页中的第1页,12页中的第2页,12页中的第3页……就像我的页眉带一样。我怎么能做到这一点,任何人都可以对此提出一个想法。

  • 我使用XML用Java和Intellij IDE生成一个jasper报告,jasper版本是5.0.4。 在文件中有欧元符号,但是在pdf上创建报表时,我看到的是而不是 它是如何来的,我应该向文件添加什么来解决这个问题?

  • 我已将图像保存在oracle数据库中为BLOB。我的模型类包含Byte[]图像;对应于数据库中的BLOB feild。我必须将数据库中的所有图像导出为PDF格式。在java中,我使用了以下代码: 我需要PDF格式的图像。

  • 我正在为jasper pdf报告使用以下代码来显示字符M平方(\u33a1) 对于这段代码,我无法在PDF中看到unicode字符。它只是一片空白。但在XLSX中,我可以看到角色。我尝试了以下内容: 删除pdfEncoding 但运气不好 更新:我使用的自定义字体似乎不支持平方m字符。我无法添加新字体或更新现有的自定义字体。但是我可以为该特定字符使用任何或内置字体。如何使用内置字体实现此目的? 我