JasperReports / PDF:用于定位列表组件中包含的通用元素的问题

时间:2013-10-31 00:11:46

标签: jasper-reports itext ireport

我正在处理一个PDF,我试图在“list”JR组件的每一行前面都有一个复选框。

我的报告中的“标题”部分已经有了一些可编辑的字段(文本和广播);一切顺利。

为此,我使用“泛型元素”并使用Java编写一些处理程序,例如在矩形(com.lowagie.text.Rectangle.Rectangle)中生成iText TextField,定义如下('element'是当前的泛型元素,类型JRGenericPrintElement):

element.getX(), 
exporterContext.getExportedReport().getPageHeight() - element.getY(),
element.getX() + element.getWidth(), 
exporterContext.getExportedReport().getPageHeight() - element.getY() - element.getHeight()

'generic element'在我的.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元素的代码,包括泛型元素。

<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>  

有人可以告诉我,如果我做错了吗?这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

在您的通用元素处理程序中,将JRPdfExporterContext.getOffsetX()/Y添加到元素的位置,即在任何地方使用element.getX() + exporterContext.getOffsetX()而不是element.getX()