2011-01-26 2 views
0

Использование JasperReports 3.7.6 (с iReport) для генерации отчета, который охватывает две страницы: в отчете есть таблица из 18 столбцов данных, столбцы от 1 до 10 на первой странице и от 11 до 18 на втором, одна запись данных отображается на двух страницах, и может быть собрано множество данных. Я попытался найти форумы, задал вопрос на форуме яшмы и не получил ответа.Отчет о многостраничной яшме

Что решит эту проблему?

+0

Решено! Способ сделать трюк: 1) сделать все страницы отчета как разные шаблоны. 2) составить в одном шаблоне (элементы будут перекрываться) 3) создать собственный источник данных для этого отчета – pls

+0

Пожалуйста, ответьте на вопрос более подробно, это может стать полезным для других. – medopal

+0

Получение ответа на свой вопрос велико - но, пожалуйста, на самом деле положите его в ответ, а затем примите его, чтобы ваш оставшийся без ответа вопрос не появлялся в списке вопросов. Благодарю. – Sean

ответ

0

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); 
    } 
} 
Смежные вопросы