Jasper reports JasperReports/PDF:定位列表组件中包含的通用元素的问题
我正在制作一个PDF,其中我试图在“列表”JR组件的每一行前面都有一个复选框。Jasper reports JasperReports/PDF:定位列表组件中包含的通用元素的问题,jasper-reports,itext,ireport,Jasper Reports,Itext,Ireport,我正在制作一个PDF,其中我试图在“列表”JR组件的每一行前面都有一个复选框。 我的报告中的“标题”部分已经有一些可编辑字段(文本和广播);一切顺利。 为此,我使用“通用元素”,并使用Java编写了一些处理程序,这些处理程序在一个矩形(com.lowagie.text.rectangle.rectangle)中生成例如iText TextField,定义如下('element'是当前的通用元素,类型为JRGenericPrintElement): “generic元素”在my.jrxml中的定义
我的报告中的“标题”部分已经有一些可编辑字段(文本和广播);一切顺利。
为此,我使用“通用元素”,并使用Java编写了一些处理程序,这些处理程序在一个矩形(com.lowagie.text.rectangle.rectangle)中生成例如iText TextField,定义如下('element'是当前的通用元素,类型为JRGenericPrintElement):
“generic元素”在my.jrxml中的定义如下:
<genericElement>
<reportElement uuid="ec205c41-afe2-44fd-a8b3-03e2d4b07ce6" x="72" y="132" width="143" height="25"/>
<genericElementType namespace="http://namespace" name="simpleEditableTf"/>
<genericElementParameter name="name">
<valueExpression><![CDATA["matricule"]]></valueExpression>
</genericElementParameter>
</genericElement>
我想使用相同的代码来定义列表复选框的位置,但似乎在将泛型元素用于列表的情况下,element.getX()和element.getY()方法返回相对于列表组件的坐标。因此,为了得到页面中元素的坐标(例如X=50,Y=200),我得到了相对于列表组件本身的坐标(X=4,Y=7);因此不可能正确设置元素。
下面是list元素的代码,包括generic元素
<componentElement>
<reportElement uuid="0aa17cac-d5e2-4592-ba0d-ab8e25cc989b" x="10" y="10" width="476" height="23" forecolor="#366798"/>
<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="Vertical">
<datasetRun subDataset="item_ab" uuid="3c25ec33-3a70-497f-b234-0d5ea64cabcf">
<dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("//item_ab")]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="23" width="476">
<textField isStretchWithOverflow="true">
<reportElement uuid="0158660b-3ab1-4149-8599-77824c64082f" x="20" y="1" width="420" height="20"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{libelle_ab}]]></textFieldExpression>
</textField>
<genericElement>
<reportElement uuid="12c64be4-27dd-4aa2-8d50-f412e25d9805" x="4" y="7" width="9" height="9"/>
<genericElementType namespace="http://namespace" name="checkBox"/>
</genericElement>
</jr:listContents>
</jr:list>
</componentElement>
有人能告诉我我做错了什么吗?这是一个bug吗?在通用元素处理程序中,将
JRPdfExporterContext.getOffsetX()/Y
添加到元素的位置,即使用element.getX()+exporterContext.getOffsetX()
无处不在,而不是element.getX()
<componentElement>
<reportElement uuid="0aa17cac-d5e2-4592-ba0d-ab8e25cc989b" x="10" y="10" width="476" height="23" forecolor="#366798"/>
<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="Vertical">
<datasetRun subDataset="item_ab" uuid="3c25ec33-3a70-497f-b234-0d5ea64cabcf">
<dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("//item_ab")]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="23" width="476">
<textField isStretchWithOverflow="true">
<reportElement uuid="0158660b-3ab1-4149-8599-77824c64082f" x="20" y="1" width="420" height="20"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{libelle_ab}]]></textFieldExpression>
</textField>
<genericElement>
<reportElement uuid="12c64be4-27dd-4aa2-8d50-f412e25d9805" x="4" y="7" width="9" height="9"/>
<genericElementType namespace="http://namespace" name="checkBox"/>
</genericElement>
</jr:listContents>
</jr:list>
</componentElement>