通过Java SDK将LineObject添加到Crystal Report

时间:2013-01-22 12:26:36

标签: java crystal-reports

我已在桌面应用程序中成功将Crystal Report与Java连接。 现在我想以编程方式在报告中添加一行。

我已尝试使用以下代码。

try {
    ReportDefController rdc = reportClientDoc.getReportDefController();
} catch (ReportSDKException ex) {
    Logger.getLogger(PurchaseReport.class.getName()).log(Level.SEVERE, null, ex);
}

Tables tables = null;
try {
    tables = reportClientDoc.getDatabase().getTables();
} catch (ReportSDKException ex) {
    Logger.getLogger(PurchaseReport.class.getName()).log(Level.SEVERE, null, ex);
}

LineObject lineObject = new LineObject();
lineObject.clone(false);
lineObject.setSectionCode(0);
lineObject.setLineThickness(10);
lineObject.setLeft(50);
lineObject.setWidth(50);
lineObject.setHeight(10);
lineObject.setRight(20);
lineObject.setTop(10);
lineObject.setLineColor(Color.BLUE);

ReportObjectController roc = null;
try {
    roc = reportClientDoc.getReportDefController().getReportObjectController();
} catch (ReportSDKException ex) {
    Logger.getLogger(PurchaseReport.class.getName()).log(Level.SEVERE, null, ex);
}

ReportDefController reportDefController = null;
try {
    reportDefController = reportClientDoc.getReportDefController();
    ISection section = reportDefController.getReportDefinition().getDetailArea().getSections().getSection(0);
    lineObject.setSectionName(section.getName());
    //roc.add(fieldObject, section, 0);
    if(roc.canAddReportObject(lineObject, section))
    {
        roc.add(lineObject, section, -1);
    }
} catch (ReportSDKException ex) {
    Logger.getLogger(PurchaseReport.class.getName()).log(Level.SEVERE, null, ex);
}

这会在roc.add(lineObject, section, -1)

处引发错误

如何解决此错误并正确添加该行?

1 个答案:

答案 0 :(得分:0)

与使用SDK的常规报表对象添加的行和框略有不同,因为它们可以跨越部分/区域。您需要指定'bottom'(或'right')和'endSection'属性,其中'bottom'是距离结束部分顶部的偏移量。高度和宽度属性对这些绘图对象没有影响(使用'right'结合'left'来指定宽度)

关于你的问题: 首先,您需要删除对setHeight& setWidth

然后,在最后一个try块中尝试类似下面的代码:

reportDefController = reportClientDoc.getReportDefController();
ISection section = reportDefController.getReportDefinition().getDetailArea().getSections().getSection(0);
lineObject.setSectionName(section.getName());

// BEGIN ADDED CODE

// specify section you want line to end in
lineObject.setEndSectionName(section.getName()); 

// how far down in the end section you want your line object - if you want a horizontal line, use setRight instead
lineObject.setBottom(100);                       

// specify some style so it appears (I think default is noLine)
lineObject.setLineStyle(LineStyle.singleLine);


// END ADDED CODE

if(roc.canAddReportObject(lineObject, section)) {
    roc.add(lineObject, section, -1);
}

这将添加一个从10开始的小垂直线(基于代码中的setTop调用),并在第一个详细信息部分中以100结束。您可能希望调整数字和定位以满足您的需求。