Фон
Если я правильно помню, ячейки в JasperReports не были ни разработаны, ни реализованы для растяжения по горизонтали. Это было сознательное решение, принятое ведущими разработчиками.
Вы можете растянуть их, генерируя ячейки кросс-таблицы в соответствии с шириной данных (одно это предложение должно дать вам представление о том, как создать общее решение этой проблемы). Это возможно, но может потребовать создания собственного класса с использованием JasperReports API .
Представьте, что у вас есть 100 000 строк данных и вы хотите, чтобы ячейка автоматически соответствовала самой длинной строке. JasperReports должен будет сделать одну из двух вещей:
- В общем случае измените оператор SQL разработчика, чтобы запросить самую длинную строку в каждом из соответствующих столбцов перед запуском окончательного оператора SQL. Это эффективно выполняет запрос дважды. Если в запросе используется непостоянный вызов функции, могут возникнуть всевозможные проблемы.
- Запросить все строки, а затем определить самую длинную строку. Для запросов до 10000 записей это не проблема. Масштабирование до 100 000 строк приводит к значительному снижению производительности и потребляет значительную часть оперативной памяти.
Тогда вы должны ответить на вопросы о пустом пространстве: обрезать или не обрезать? Если программное обеспечение для отчетов обрезает его, возвращаемые данные не являются точным представлением информации в базе данных. Если данные не обрезаны, то это приводит к большему количеству проблем (таких как неожиданно сверхдлинные столбцы, которые выглядят «пустыми»). Или вы можете сделать еще одну вещь, которую должен сделать разработчик.
Это не тривиальная проблема.
Альтернативы
Попробуйте DynamicJasper .