We've had to deal with this too and have a few solutions. 1. If the number of columns is small and the same for all pages(data records) in the report, you can create the maximum number of column elements needed in the jrxml file and then set the unneeded ones to zero width and the needed ones to the correct width within the JasperReport object before sending it to the JasperFillManager. 2. If the number of columns is too cumbersome to create the maximum number of elements, you can create a subreport, load the jrxml, change the number of columns, compile the subreport, change the column element's width, and add it to the main report. Code:InputStream jasperIS = MyReport.class.getResourceAsStream("MySubreport.xml"«»); JasperDesign subDesign = JRXmlLoader.load(jasperIS); subDesign.setColumnCount(itemCount); int columnWidth = SUBREPORT_WIDTH / itemCount; subDesign.setColumnWidth(columnWidth); JasperReport subreport = JasperCompileManager.compileReport(subDesign); JRBand jb = subreport.getDetail(); JRElement je = jb.getElementByKey("theTextField"«»); je.setWidth(columnWidth); ... parameters.put("subreport", subreport); 3. If the number of columns changes for each page(data record) in the report, you will need to use a scriptlet. See my other post on "Changing report element properties in a scriptlet" for infor on how to do this. -doug