2016-04-06 1 views
2

Я начинаю с JasperReports (первая попытка) так, Я настроил свои netbeans, и моя первая попытка использовать данные из базы данных была успешной. Но теперь я просто хочу создать свой отчет из json-данных, используя Jasper Reports в Netbeans. И я думаю, что это не похоже на получение данных из базы данных.Заполнение отчетов от json с помощью JasperReports

Кстати, я попытался изменить свой файл XML и добавить:

<textField> 
      <reportElement x="0" y="31" width="555" height="20" uuid="9678a129-61e8-4034-ab8e-739ee5723c87"/> 
      <textElement textAlignment="Right"> 
       <font size="12" isBold="true"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$F{nom}]]></textFieldExpression> 
     </textField> 

Но это дает мне нуль в докладе.

Вот что я сделал в Java стороне:

Map parametersMap = new HashMap(); 
parametersMap.put("name", json.getString("Name")); 
parametersMap.put("start", json.getString("Start")); 
parametersMap.put("end", json.getString("end")); 
String report = "C:\\My\\Path\\toReport\\report1.jrxml"; 
JasperReport Jasp = JasperCompileManager.compileReport(report); 
JasperPrint JASP_PRINT = JasperFillManager.fillReport(Jasp,parametersMap); 
JasperViewer.viewReport(JASP_PRINT); 

ОБНОВЛЕНО:

Вот мой Java код

public void start(Future<Void> startFuture){ 

String fileJSON = "C:\\Users\\PathToMyFile\\data.txt"; 
    String file = "/Test1/:name"; 
    Router router = Router.router(vertx); 
     router.route(file).handler(routingContext -> { 
     HttpServerResponse response = routingContext.response(); 
     response.setChunked(true); 
     routingContext.vertx().setTimer(1000, tid -> routingContext.response().end()); 
    }); 
    vertx.createHttpServer() 
      .requestHandler(router::accept) 
      .listen(8089, "localhost", res -> { 
       if (res.succeeded()) 
        startFuture.complete(); 
       else 
        startFuture.fail(res.cause()); 
      }); 

    vertx.fileSystem().readFile(fileJSON, (AsyncResult<Buffer> result) -> { 
     if (result.succeeded()) {     
           JsonObject json = result.result().toJsonObject(); 
          try{ 
           Map parametersMap = new HashMap(); 
           parametersMap.put("name",json.getString("name")); 
           parametersMap.put("start",json.getString("start")); 
           parametersMap.put("end",json.getString("end")); 
           String report = "C:\\Users\\pathToMyPackage\\report1.jrxml"; 
           JasperReport Jasp = JasperCompileManager.compileReport(report); 
           JasperPrint JASP_PRINT = JasperFillManager.fillReport(Jasp,parametersMap); 
           JasperViewer.viewReport(JASP_PRINT); 

И для моего JRXML файла:

<property name="ireport.zoom" value="1.0"/> 
<property name="ireport.x" value="0"/> 
<property name="ireport.y" value="0"/> 
<queryString language="json"> 
    <![CDATA[]]> 
</queryString> 
<field name="nom" class="java.lang.String"> 
    <fieldDescription><![CDATA[name]]></fieldDescription> 
</field> 
<field name="dateDebut" class="java.lang.String"> 
    <fieldDescription><![CDATA[start]]></fieldDescription> 
</field> 
<background> 
    <band splitType="Stretch"/> 
</background> 
<detail> 
    <band height="125" splitType="Stretch"> 
     <textField> 
      <reportElement x="100" y="0" width="100" height="30" uuid="02b279da-3795-4655-8571-5a36a3ef378c"/> 
      <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression> 
     </textField> 
     <staticText> 
      <reportElement x="0" y="0" width="100" height="30" uuid="671e61ad-8d8f-48cb-969f-78c05a516398"/> 
      <text><![CDATA[name]]></text> 
     </staticText> 
     <textField> 
      <reportElement x="100" y="30" width="100" height="30" uuid="9d53f46f-a252-48b3-9213-8c3092c29f49"/> 
      <textFieldExpression><![CDATA[$F{start}]]></textFieldExpression> 
     </textField> 
     <staticText> 
      <reportElement x="0" y="30" width="100" height="30" uuid="3b49affb-685a-4df2-a872-c0e6fdcab94b"/> 
      <text><![CDATA[start]]></text> 
     </staticText> 
    </band> 
</detail> 

И мой файл JSON:

{ 
"Name": "Test", 
"Start": "16-06-2015", 
"End":"16-06-2019" 
} 
+0

Образец использования: [JSON Источник данных Обзор] (Http: // JasperReports .sourceforge.net/sample.reference/jsondatasource/index.html # jsondatasource) –

+0

Я разместил дубликат, который показывает, как передать источник данных json для отчета, в основном вы не проходите через параметр put as datasource, чтобы увидеть дубликат (и если вы его решите, вы согласитесь с повторением) –

+0

Спасибо, Алекс за например, но у меня все еще есть проблемы с – zackzulg

ответ

4

Вы должны передать данные в качестве источника данных в JSON это делается путем пропускания потока через карту параметров (так как вы используете вершины, получить JSON в формате Строка, а затем передать его в качестве поток).

Пример

InputStream iostream = new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8)); 
parametersMap.put(JsonQueryExecuterFactory.JSON_INPUT_STREAM, iostream); 

Затем вы можете определить поля, связанные с вашим JSon и JSon (XPath) запроса