簡體   English   中英

多頁碧玉報告

[英]Multi page jasper report

使用JasperReports 3.7.6(帶iReport)生成跨兩頁的報告:report有一個包含18列數據的表,第一頁從1到10列,第二頁從11到18列,其中一個記錄數據顯示在兩頁上,並且可能會收集很多數據。 我試圖搜索論壇,在碧玉論壇上問了問題,但沒有答案。

有什么辦法解決這個問題?

1)我認為這很明顯,但是..只需將多頁報告的每一頁分開即可。

2)使用從一個報告到另一報告的復制/粘貼XML,將所有分開的頁面組合在一個頁面中,最后只有一個報告存在,並且它將包含所有元素(之前是分開的)

3)編寫數據源,可能是這樣適合您:

private final List data; private final Iterator iterator;

private List<IRecord> buffer;
private Iterator<IRecord> bufferIterator;

private IRecord currentValue;

private int pageCount;
private int pageRowNum;

private boolean useBuffer;
private int position;
private int counter;

public MultiPageReportDataSource(List<? extends IRecord> data, int pageRowNum, int pageCount) {
    this.data = data;
    this.iterator = this.data.iterator();
    this.buffer = new LinkedList<IRecord>();
    this.bufferIterator = this.buffer.iterator();
    this.pageRowNum = pageRowNum;
    this.pageCount = pageCount;
    this.counter = pageCount;
}

@Override
public boolean next() throws JRException {
    if (position > 0 && position % pageRowNum == 0) {
        counter--;
        if (counter == 0) {
            buffer.clear();
            useBuffer = false;
            counter = pageCount;
        } else {
            useBuffer = true;
            bufferIterator = buffer.iterator();
        }
        position = 0;
    }
    if (useBuffer) {
        if (bufferIterator.hasNext()) {
            currentValue = bufferIterator.next();
        }
    } else {
        if (iterator.hasNext()) {
            currentValue = iterator.next();
            buffer.add(currentValue);
        } else {
            return false;
        }
    }
    position++;
    return true;
}

@Override
public Object getFieldValue(JRField jrField) throws JRException {
    Field field = ReflectUtil.field(CashierReportEntity.class, jrField.getName());
    try {
        return ReflectUtil.accessible(field).get(currentValue);
    } catch (IllegalAccessException e) {
        throw new JRException(e);
    }
}

暫無
暫無

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

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