У меня есть несколько отчетов Jasper, которые отображаются в формате HTML. Я хотел бы, чтобы ширина столбцов в таблицах HTML автоматически изменялась, чтобы соответствовать содержимому самой широкой ячейки (в этом столбце), чтобы отображались все данные.
В настоящее время этого не происходит, потому что HTML, сгенерированный Jasper, определяет фиксированную ширину для <table> и некоторых элементов <td>, например.
<td style = "width: 20px; height: 17px;">
<span style = "font-family: Arial; font-size: 11px;">foo-bar-baz@examp</span>
</td>
Я не могу просто удалить все эти свойства ширины (используя JavaScript), потому что (как показано в HTML выше) любые данные, которые были бы скрыты при использовании этой ширины, даже не возвращаются на сторону клиента.
Ваше здоровье, Дон
У меня такая же проблема. Если вы хотите, чтобы столбцы равномерно распределялись по доступной ширине, это невозможно. В Jasper Stuido, когда вы создаете таблицу, скажем, с 10 столбцами, он помещает столбцы в крошечную область шириной всего 22 пикселя. Затем вам нужно отредактировать каждую ячейку и вручную изменить ширину на какое-то вычисленное вами значение - это займет несколько часов. Затем, когда вы захотите его изменить ... по этой причине я НИКОГДА больше не использую таблицы. Я использую подотчеты практически для всего, так как вы можете изменить их ширину перетаскиванием.




Хотя это и не идеально, вы можете пометить поле для растяжения с переполнением. По крайней мере, это даст вам все данные. В вашем файле jrxml это будет похоже на:
<textField isStretchWithOverflow = "true" hyperlinkType = "None">
<reportElement style = "Report Sub-Title" x = "0" y = "84" width = "802" height = "20"/>
<textElement/>
<textFieldExpression class = "java.lang.String">
<![CDATA["For the period ...]]>
</textFieldExpression>
</textField>
Боюсь, я не знаю ни одной функции отчетов Jasper, которая позволяла бы динамически изменять размер ширины столбцов - вероятно, это одна из тех вещей, которые имеют смысл для HTML, но не имеют смысла для других форматов вывода, таких как PDF.
Согласен с Джейми Лавом. Но я бы применил его предложение к тегу columnHeader, чтобы свойство применялось ко всему столбцу.
Отлично, спасибо !! Я обнаружил, что когда столбец растягивается, чтобы соответствовать содержимому, рядом с соседним столбцом нет отступов. Добавление <box padding = "10"/> в элемент textField устранило эту проблему, как было предложено этот ТАК ответ.
В iReport есть опция «Тип растяжки». Выберите «Относительно высоты полосы».
@Carlos: Это заставит ячейку растягиваться по высоте, а не по ширине.
Разработчики приняли осознанное решение не допускать растяжения ячеек в ширину. Чтобы столбцы меняли свою ширину в зависимости от содержимого, это необходимо делать с помощью программирования. Полезный инструмент: DynamicJasper.
DynamicJasper creates reports dynamically, defining at runtime the columns, column width (auto width), groups, variables, fonts, charts, crosstabs, sub reports (that can also be dynamic), page size and everything else that you can define at design time.
У Форум JasperReports и DynamicJasper КАК КАК СДЕЛАТЬ есть примеры автоматической (динамической) ширины столбца.
FastReportBuilder drb = new FastReportBuilder();
drb.addColumn("State", "state", String.class.getName(),20)
.addColumn("Branch", "branch", String.class.getName(),30)
.addColumn("Quantity", "quantity", Long.class.getName(),60,true)
.addColumn("Amount", "amount", Float.class.getName(),70,true)
.addBarcodeColumn("Bar-Code", "amount", Long.class.getName(), BarcodeTypes.USD3, true,
false,null, 100, true, ImageScaleMode.FILL, null)
.addGroups(1)
.setDetailHeight(30)
.setTitle("November 2006 sales report")
.setSubtitle("This report was generated at " + new Date())
.setUseFullPageWidth(true);
DynamicReport dr = drb.build();
Передача true при вызове addColumn указывает на использование ширины фиксированный. Если оставить параметр выключенным или передать false, ширина столбца будет установлена динамически. Возможно, вам также придется вызвать в setUseFullPageWidth( true ), чтобы активировать автоматическую ширину, но я не уверен в этом.
Вы пробовали использовать я докладываю. Это IDE для написания JasperReports. Это могло бы упростить вашу жизнь.