我在我的服务器上安装了BIRT Web-Viewer,并且能够使用以下URL构建报告:
http://hostname:port/birt/run?__report=test.rptdesign
现在我需要以编程方式从我的Java代码中调用此URL并将结果检索为流或文件。
是否有Web-Viewer的API?
如果没有,我可以像这样调用URL并提取PDF吗?:
HttpClient httpClient = HttpClients.createDefault();
HttpGet postRequest = new HttpPost("http://hostname:port/birt/run");
List<NameValuePair> formData = new ArrayList<>();
formData.add(new BasicNameValuePair("__report", "test.rptdesign"));
HttpEntity entity = new UrlEncodedFormEntity(formData);
HttpResponse response = httpClient.execute(postRequest);
答案 0 :(得分:0)
我发现,如果我使用值__format
的{{1}}参数,则对请求的响应是PDF内容,这正是我想要的。
标准响应是HTML,将在第二次请求时返回。我很确定必须通过会话检索响应。
修改强> 根据要求,我将发布我的请求代码。我修改了一下,因为我使用了一些自定义类来保存配置和报告。
pdf
在调用public InputStream getReport() throws Exception {
StringBuilder urlBuilder = new StringBuilder()
.append("http://example.com:9080/contextRoot/run")
.append("?__report=ReportDesign.rptdesign&__format=pdf");
if (reportParameters != null) {
for (Map.Entry<String, String> parameter : reportParameters.entrySet()) {
String key = StringEscapeUtils.escapeHtml(parameter.getKey());
String value = StringEscapeUtils.escapeHtml(parameter.getValue());
urlBuilder.append('&')
.append(key);
.append('=');
.append(value);
}
}
URL requestUrl = new URL(burlBuilder.toString());
HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
return connection.getInputStream();
}
之前,我还有另一种方法将使用过的数据作为XML写入文件系统,但我认为只有像我一样使用非常动态的数据时才需要这样做。