2012-07-18 18 views
13

JRBeanCollectionDataSource kullanarak Jasper raporunu (PDF, Excel, Csv) oluştururken sorun yoktur. Bu, .jrxml dosyasının, raporu işlemek için bir girdi olarak pojo koleksiyonunu kabul ettiği anlamına gelir.Jasper Raporunu Oluşturun JSON nesnesinden PDF formu Nesne veya JSON Dizgisi

Şimdi, jasper raporunu aynı .jrxml ile ancak JSON Nesnesinden oluşturmaya çalışıyorum. Ben aşağıdakileri denedim ama tüm değerler pdf raporuna

Resource resource = new ClassPathXmlApplicationContext().getResource("classpath:reports/project.jrxml"); 
JsonDataSource ds = new JsonDataSource(new File("c:\myjson.json")); 
jasperDesign = JRXmlLoader.load(resource.getInputStream()); 
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds); 
JasperExportManager.exportReportToPdfFile(jasperPrint, destination+fileName+".pdf"); 

herhangi biri bana yardımcı olabilir null nelerdir?

+0

Hiç bu işe yaramadı mı? Ben şimdi aynı şeyi deniyorum – Marianna

cevap

18

JSS'i bir Jasper Raporuna DataSource olarak kullanmakla uğraşıyorum ve Net'in iyi örneklerinden yoksun olduğum için bu konuyu ileride referans olarak göndereceğim diye düşündüm.

Bu örnek, iReport Designer'ın ve JSON DataSource'un nasıl kullanılacağıdır.

Öncelikle, giriş JSON:

{ 
    "userName": "Evil Raat", 
    "details": { 
     "email": "[email protected]" 
    } 
} 

Sonra İReport Designer'daki bir JSON DataSource oluşturun ve

Sonraki kullanabilirsiniz (varsayılan olarak tüm diğer ayrıntıları çıkmak) dosyası olarak o noktaya

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="sample" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a894078a-929b-4aae-a1d0-46485f0f8835"> 
    <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="userName" class="java.lang.String"> 
     <fieldDescription><![CDATA[userName]]></fieldDescription> 
    </field> 
    <field name="userEmail" class="java.lang.String"> 
     <fieldDescription><![CDATA[details.email]]></fieldDescription> 
    </field> 
    <title> 
     <band height="200" splitType="Stretch"> 
      <textField> 
       <reportElement uuid="3b74775b-4555-43c3-bdf2-1677145c8660" x="0" y="31" width="555" height="20"/> 
       <textElement textAlignment="Right"> 
        <font fontName="Helvetica" size="12" isBold="true"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$F{userName}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement uuid="aa6cc7c8-2ca1-4f0f-92e2-c466083daba0" x="0" y="54" width="555" height="20"/> 
       <textElement textAlignment="Right"> 
        <font fontName="Helvetica" size="12" isBold="true"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$F{userEmail}]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 

NOT: jrxml şablonu izleyen bir rapor haline yukarıdaki JSON işlemek için Sen tanımlamanız gerekir Alan öğeleri önce, herhangi bir önce kullanılabilir. Standart nokta notasyonu kullanarak JSON giriş dosyasının kökünden JSON yolu olmalıdır. Örnekler için yukarıdaki alana bakınız. Bazı insanlara yardım

Hope: saha onun hesaplanan bir metin alanına değeri ya da her neyse kullanabilirsiniz tanımlandıktan sonra

.

+2

Nesne dizileri hakkında ne. Onlarla nasıl başa çıkıyorsun? Özellikle detaylar grubuna yerleştirmek için? – Yebach

+0

Üzgünüz, bu yazıdan uzun bir süre sonra Jasper Raporları ile çalışmayı bıraktım, bu yüzden hiç bir fikrim yok. –

1

Bu benim

ben şu diziyi kapalı rapor istiyorsunuz diyelim somakiye json diziler işlemek nasıl. rapor tasarlarken

[ 
    {"name":"Jerry", "value":"Jesus"}, 
    {"name":"Gideon", "value": "Loves"}, 
    {"name":"Eva", "value": "You"} 
] 

, sen alanları da json alan adı tam olarak aynı ismi emin olun. Yani tasarımcıda adı ve değeri olarak adlandırılan iki alan ekleyeceğim. Rapor tasarımcısına gerektiği kadar parametre ekleyebilirsiniz. Bu örnekte, Jasper Studio'da başlığı adında bir parametre ekleyeceğim.

Şimdi, bu sınama dizisini temel alan jasper raporunu oluşturacak olan java kodu. Koddaki json verilerini kodlayacağım, ancak dosyadan veya en iyi hissettiğiniz herşeyi yükleyebilirsiniz. Ne olduğunu açıklamak için kodu açıkladım. https://mis.io/pub/how-to-create-a-jasper-pdf-report-from-a-json-datasource-in-java/ için

import net.sf.jasperreports.engine.export.JRHtmlExporterParameter; 
import net.sf.jasperreports.engine.export.JRXlsExporterParameter; 
import net.sf.jasperreports.engine.export.JRHtmlExporter; 
import net.sf.jasperreports.engine.export.JRXlsExporter; 
import net.sf.jasperreports.engine.data.JsonDataSource; 
import net.sf.jasperreports.engine.JRExporterParameter; 
import net.sf.jasperreports.engine.JasperExportManager; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.util.JRLoader; 
import net.sf.jasperreports.engine.JasperReport; 
import net.sf.jasperreports.engine.JRException; 
import net.sf.jasperreports.engine.JasperPrint; 
import org.apache.commons.codec.binary.Base64; 
import java.util.HashMap; 
import java.util.Locale; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 
import java.io.*; 

//Class Name. This must match the class name you put in your build.gradle file 
public class JasperPDFExample { 
public static void main(String[] args) { 
    try { 
    try { 
    //Our json object. This can be loaded from file 
    String rawJsonData = "[{\"name\":\"Jerry\", \"value\":\"Jesus\"}," 
         + "{\"name\":\"Gideon\", \"value\": \"Loves\"}," 
         + "{\"name\":\"Eva\", \"value\": \"You\"}" 
         + "]"; 
    //Load compiled jasper report that we created on first section. 
    JasperReport report = (JasperReport) JRLoader.loadObject(new File("/home/jerry/Sample.jasper")); 
    //Convert json string to byte array. 
    ByteArrayInputStream jsonDataStream = new ByteArrayInputStream(rawJsonData.getBytes()); 
    //Create json datasource from json stream 
    JsonDataSource ds = new JsonDataSource(jsonDataStream); 
    //Create HashMap to add report parameters 
    Map parameters = new HashMap(); 
    //Add title parameter. Make sure the key is same name as what you named the parameter in jasper report. 
    parameters.put("title", "Jasper PDF Example"); 
    //Create Jasper Print object passing report, parameter json data source. 
    JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, ds); 
    //Export and save pdf to file 
    JasperExportManager.exportReportToPdfFile(jasperPrint,"/home/jerry/jasperpdfexample.pdf"); 
    } catch (JRException ex) { 
    ex.printStackTrace(); 
    throw new RuntimeException(ex); 
    } catch (Exception ex) { 
    ex.printStackTrace(); 
    throw new RuntimeException(ex); 
    } 
    } catch (Exception ex) { 
    ex.printStackTrace(); 
    throw new RuntimeException(ex); 
    } 
} 
} 

sayesinde bu gradle yapım araçlarıyla Jasper için java kurma ile birlikte çalışmak için başardı.