最近项目需要,使用JAVA调用crystalreport生成PDF。
花了很多时间,最后才发现,原来旧版本的jar需要升级,才能调用到那些方法,现发出来跟大家分享一下~~
首先,需要下载CR for eclipse 2.0(这个很重要,不然很多方法找不到,找到了还要你连server)
下载完后。
1, 在eclipse里建一个java项目
2, 把下载的crystal reports的jar导到项目里, 还需要把数据库连接的包也导到项目里(例如:crystal report里用的是JDBC,就导入JDBC的连接包)。
3, 写一个类:
import iExpOption.IExpOptionFunction;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Iterator;
import java.util.Map;
import com.crystaldecisions.sdk.occa.report.application.ReportClientDocument;
import com.crystaldecisions.sdk.occa.report.exportoptions.ReportExportFormat;
import com.crystaldecisions.sdk.occa.report.lib.ReportSDKException;
public class ExpOptionFunction
{
public ByteArrayInputStream returnPDFStream(String rptPath, Map param,
String username, String password) throws RemoteException{
// TODO Auto-generated method stub
try {
ReportClientDocument repClientDoc=new ReportClientDocument();
repClientDoc.setReportAppServer(ReportClientDocument.inprocConnectionString);
repClientDoc.open(rptPath, ReportExportFormat._PDF);
repClientDoc.getDatabaseController().logon(username, password);
if(param!=null)
{
Iterator it=param.keySet().iterator();
while(it.hasNext())
{
String key=(String)it.next();
Object value=param.get(key);
repClientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", key,value);
}
}
ByteArrayInputStream input = (ByteArrayInputStream) repClientDoc.getPrintOutputController().export(ReportExportFormat.PDF);
repClientDoc.close();
} catch (ReportSDKException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bais;
}
}