0
使用JasperReports 3.7.6(帶有iReport)生成跨兩頁的報表:報表具有18列數據,第1頁上的列數從1到10以及11到18第二,一個數據記錄顯示在兩個頁面上,並且可以收集大量數據。我試圖搜索論壇,在jasper論壇上提出問題,但沒有得到答案。多頁面碧玉報告
什麼會解決這個問題?
使用JasperReports 3.7.6(帶有iReport)生成跨兩頁的報表:報表具有18列數據,第1頁上的列數從1到10以及11到18第二,一個數據記錄顯示在兩個頁面上,並且可以收集大量數據。我試圖搜索論壇,在jasper論壇上提出問題,但沒有得到答案。多頁面碧玉報告
什麼會解決這個問題?
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);
}
}
解決!訣竅的方法:1)將所有報告頁面作爲不同的模板。 2)然後在一個模板中構成(元素將重疊)3)爲此報告創建自定義數據源 – pls 2011-01-26 14:21:36