如何使用Java API动态更改JasperReports中List的单元格宽度

时间:2017-05-12 14:09:39

标签: java jasper-reports

我找不到从JasperReports中的List动态更改单元格宽度的正确方法。

final JasperDesign template = JRXmlLoader.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("report_tarif_comparison.jrxml"));
final JRBand[] bands = template.getAllBands();
final JRElement element = bands[1].getElementByKey("compareList");

我按getElementByKey获取列表,但元素Object没有setCellWidthsetCellHeight

等方法

我的jrxml文件的一部分:

<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Horizontal" ignoreWidth="false">
    <datasetRun subDataset="compareTarif" uuid="03bdfbc4-19ae-47a1-a27e-bbacde25965f">
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{policies})]]></dataSourceExpression>
    </datasetRun>
    <jr:listContents height="494" width="138">
        ....//textfields
    </jr:listContents>
</jr:list>

在Jaspersoft Studio中,我可以从List:

更改属性窗口中的Cell Width

Jasper Studio, Properties from List

1 个答案:

答案 0 :(得分:2)

你必须做这样的事情:

JRComponentElement element = (JRComponentElement) bands[1].getElementByKey("compareList");
ListComponent component = (ListComponent) element.getComponent();
DesignListContents contents = (DesignListContents) component.getContents();
contents.setWidth(...);

请注意,这只会更改单元格的宽度。如果你还想让文本字段更宽,你必须明确地做;您可以通过contents.getElements()获取元素。