繁体   English   中英

显示由Web服务生成的Jasper报告

[英]Displaying jasper report generated by a web service

我有一个Java桌面应用程序,应该显示从Web服务获取的jasper报告。 Web服务将这样返回字节数组:

JasperDesign jasperDesign = JRXmlLoader.load(input);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parametersMap, resultSetDataSource);
byte[] pdfByteArray = JasperExportManager.exportReportToPdf(jasperPrint);
return pdfByteArray;

如何在JRViewer中显示返回的字节数组? 我可以将字节数组转换为JasperPrint对象吗? 我无法从Web服务返回JasperPrint对象,因为出现“接口”错误。

我终于找到了解决我问题的方法。 首先,不是返回Web服务的字节数组,而是返回包含xml文件的字符串,如下所示:

JasperDesign jasperDesign = JRXmlLoader.load(input);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parametersMap, resultSetDataSource);
String xmlString = JasperExportManager.exportReportToXml(jasperPrint);
return xmlString;

接下来,在客户端应用程序中,我将使用此字符串并将其转换为文档。 我从http://www.journaldev.com/1237/java-convert-string-to-xml-document-and-xml-document-to-string获得以下方法:

private static Document convertStringToDocument(String xmlStr) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
    DocumentBuilder builder;  
    try {  
        builder = factory.newDocumentBuilder();  
        Document doc = builder.parse( new InputSource( new StringReader( xmlStr ) ) ); 
        return doc;
    } catch (Exception e) {  
        e.printStackTrace();  
    } 
    return null;
}

接下来,将文档保存到本地磁盘中,如下所示:

Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult(new File("theFile.xml"));
Source input = new DOMSource(doc);
transformer.transform(input, output);

最后,我使用JRViewer构造函数显示了新保存的xml:

JRViewer view = new JRViewer("theFile.xml", true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM