2016-04-06 41 views
2

JasperReports ile başlangıç ​​yapıyorum (ilk denemede), Netbeans'ları kurarım ve veritabanından veri kullanmaya ilk denemem başarılı oldu. Ama şimdi sadece jöle verilerden, Netbeans'deki Jasper Raporlarını kullanarak raporumu oluşturmak istiyorum. Ve bence Veritabanından veri almak gibi değil.JasperReports kullanarak json raporları doldurma

benim xml dosyasını düzenlemek ve bu eklemeyi denedim arada

:

<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> 

Ama raporda bana boş veriyor. GÜNCELLEME

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); 

: Burada

benim Java kodu

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); 

Ve JRXML dosyası için:

<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> 
İşte

ben java tarafında yaptıklarını olduğunu

Ve benim JSON dosyam:

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

kullanmanın numune ile ilgili alanlar tanımlayabilirsiniz: [JSON Veri Kaynağı Bakış] (http: // JasperReports .sourceforge.net/sample.reference/jsondatasource/index.html # jsondatasource) –

+0

Json veri kaynağının nasıl raporlanacağını gösteren bir kopyasını yayınladım, temel olarak datasource gibi parametreden geçiş yapmıyorsunuz. ve eğer çözdüyseniz çift olarak kabul edersiniz) –

+0

th için teşekkür ederim Alex e örnek ama hala bazı problemler var – zackzulg

cevap

4

Bu sen köşe kullandığınız beri (parametre harita üzerinden akımı geçirilerek yapılır json içinde, bir veri kaynağı olarak veri aktarmak için ihtiyaç dize biçiminde json almak ve sonra olarak iletin bir akıntı).

Örnek

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

Sonra json ve json (xpath) sorgusu