Membuat Laporan yang Multi-Database dan Multi-Persistence Menggunakan JasperReport


Sudah tau tentang JasperReport kan?

Jika belum itu tandanya anda kurang pergaulan 🙂 , sudah pasti setiap developer Java mengetahui tentang JasperReport, khususnya yang bercimpung di dunia Sistem Informasi. Kenapa? Karena dimana ada Sistem Informasi, disitu pula pasti ada yang namanya Laporan, yup bagi yang belum tau, JasperReport adalah framework untuk membuat laporan di Java.

Saat ini kebanyakan orang menggunakan SQL dan teman-temannya dalam membuat laporan, kenapa? Karena memang mudah 😀

Tapi tahukan Anda kalo banyak sekali perbedaan perintah SQL setiap Sistem Basis Data? Misal di MySQL memiliki perintah LIMIT untuk membatasi banyak record yang ditemukan, sedangkan di ORACLE tidak ada perintah LIMIT 😦

Hal ini bisa berakibat kita perlu membuat ulang laporan yang sudah dibuat jika kita akan melakukan migrasi dari satu Sistem Basis Data ke Sistem Basis Data yang lainnya 😦 #capedeh

Tapi tenang saja, setelah membaca tutorial ini Anda tidak perlu khawatir lagi soal gonta-ganti SQL di laporan yang anda buat 😀

Membuat Entitas

Sebelum membuat laporan, pertama tentukan dulu, Anda mau membuat laporan apa?

Ok! Saya aja yang nentuin 😀 bagaimana kalo kita akan membuat laporan daftar pegawai sederhana 😀 Laporannya menampilkan data karyawan yang berupa [nip, nama, tanggal lahir, email] 😀 Sederhana kan? Gak usah terlalu rumit 😀

Jadi tahap pertama adalah kita harus membuat kelas POJO (Plain Old Java Object) nya :

package khannedy.jasperreport.reporting;

import java.sql.Date;

public class Pegawai {

	private String nip;
	private String nama;
	private Date tanggalLahir;
	private String email;

	public String getNip() {
		return nip;
	}

	public void setNip(String nip) {
		this.nip = nip;
	}

	public String getNama() {
		return nama;
	}

	public void setNama(String nama) {
		this.nama = nama;
	}

	public Date getTanggalLahir() {
		return tanggalLahir;
	}

	public void setTanggalLahir(Date tanggalLahir) {
		this.tanggalLahir = tanggalLahir;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}

Setelah membuat kelas entitas nya, baru saatnya membuat laporan 😀 Kok gak tabel di database dulu? Emang gak perlu 😀 Buat apa? 😛

Membuat Laporan

Untuk membuat laporan menggunakan JasperReport, anda perlu membuatnya dalam file JRXML, isinya mirip sintak XML, jadi perlu orang-orang yang sudah mahir untuk membuatnya 😦

Tapi tidak usah khawatir 😀 Anda dapat membuat laporannya secara GUI menggunakan iReport 😀 , jika anda menggunakan iReport, buatlan sebuah laporan dengan Empty DataSource.

Setelah itu, tambahkan Field-Field yang sesuai dengan Entitas yang akan dibuat laporannya. Pada kelas entitas tersebut kita telah membuat field :

  • nip : String
  • nama : String
  • tanggalLahir : java.util.Date
  • email : String

Hasilnya seperti ini :

Setelah itu, tambahkan field-field itu kedalam design tampilan laporan, misal seperti pada gambar dibawah ini :

Sekarang compile laporan tersebut, sehingga hasilnya adalah file .JASPER , dan file .JASPER itulah yang nanti akan kita gunakan 😀

Menampilkan Laporan

Untuk menampilkan Laporan, silahkan Anda gunakan kode diawah ini :

package khannedy.jasperreport.reporting;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

public class PegawaiMain {

	public static void main(String[] args) throws Exception {
		InputStream streamReport = JRLoader
				.getFileInputStream("/home/echo/reporting/beans.jasper");

		List<Pegawai> list = new ArrayList();

		for (int i = 0; i < 100; i++) {
			Pegawai pegawai = new Pegawai();
			pegawai.setNip("10106031" + i);
			pegawai.setNama("Eko Kurniawan Khannedy");
			pegawai.setTanggalLahir(new Date());
			pegawai.setEmail(&quot;echo.khannedy@gmail.com&quot;);
			list.add(pegawai);
		}

		JRDataSource datasource = new JRBeanCollectionDataSource(list);

		Map&lt;Object, Object&gt; map = new HashMap&lt;Object, Object&gt;();
		map.put(JRParameter.REPORT_DATA_SOURCE, datasource);

		JasperPrint report = JasperFillManager.fillReport(streamReport, map);

		JasperViewer.viewReport(report);
	}

}

Jika kode diatas dijalankan, maka hasilnya seperti dibawah ini :

Trus dimana Multi-Database dan Multi-Persistence nya? 😀

Tenang-tenang 😀

Menjadikan Multi-Database dan Multi-Persistence

Jika anda perhatikan, data yang ada di tabel dalam laporan diatas, saya menggunakan List, bukan query SQL , sehingga dengan begitu saya tidak perlu menggunakan database untuk menjalankan aplikasi yang saya buat.

// membuat List
List<Pegawai> list = new ArrayList<Pegawai>();

// Membuat DataSource dari List
JRDataSource datasource = new JRBeanCollectionDataSource(list);

// Menambahkan DataSource
Map<Object, Object> map = new HashMap<Object, Object>();
map.put(JRParameter.REPORT_DATA_SOURCE, datasource);

Dengan begitu, artinya saya sudah tidak tergantung lagi dengan yang namanya database 😀

Lantas bagaimana dengan Multi-Persistence. Anggap saja misal saat ini Anda menggunakan JDBC, Hibernate Framework, OpenJPA, EclipseLink dan sebagainya untuk melakukan proses manipulasi data di database. Dengan kode yang sebelumnya telah kita buat, kita tidak akan tergantung lagi dengan teknologi Persistence yang kita gunakan, karena jika seandainya kita menggunakan JDBC, kita cukup membuat kodenya menjadi seperti ini :

// membuat List
List<Pegawai> list = pegawaiJdbcDao.getAll();

// Membuat DataSource dari List
JRDataSource datasource = new JRBeanCollectionDataSource(list);

// Menambahkan DataSource
Map<Object, Object> map = new HashMap<Object, Object>();
map.put(JRParameter.REPORT_DATA_SOURCE, datasource);

Atau jika kita menggunakan Hibernate Framework :

// membuat List
List<Pegawai> list = pegawaiHibernateDao.getAll();

// Membuat DataSource dari List
JRDataSource datasource = new JRBeanCollectionDataSource(list);

// Menambahkan DataSource
Map<Object, Object> map = new HashMap<Object, Object>();
map.put(JRParameter.REPORT_DATA_SOURCE, datasource);

Tidak perlu lagi kita mengubah dokumen laporan yang kita buat kan? 😀 Yang hanya diperlukan adalah menentukan dari mana asal data pegawai 😀

Landasan Teori

😀

Iklan

58 pemikiran pada “Membuat Laporan yang Multi-Database dan Multi-Persistence Menggunakan JasperReport

  1. mas,,,saya mau bikin purchase order nih..
    saya dah berhasil bikin kaya yang di tutorial ini,,tapi masalahnya yang namanya purchase order itu kan di bagian bawah tabel list-item-yang -mau-dipesen ada yang total, subtotal, dsb..saya ndak bisa nampilinnya berhubung d ireport pengaturan labelnya itu manual..
    mohon pencerahannya…

  2. nice info gan 🙂 ane coba tips & triks nya
    di oracle penggunaan limit di ganti rownum 🙂
    // mysql
    select col from tbl limit 20;

    // Oracle
    select col from tbl where rownum<=20;

    // Microsoft SQL
    select top 20 col from tbl;

  3. mas,saya ada problem nih..
    sudah berhasil buat jrxml nya..
    tapi saya gagal pas manggil,
    variable JRLoader,JasperPrint,JasperViewe,dkk ga dikenali,bahkan import nya ga dikenali..padahal sudah saya include di library nya jasperreport..saya pake versi terbaru,ambil di situsnya,versi 3.7.3..apa di versi ini ada perubahan nama variable ya?
    makasih mas..mohon bantuan buat newbie ini..

  4. mas,mau tanya..
    saya pake code ini,uda generate .jrxml

    try {
    // TODO add your handling code here
    InputStream streamReport = null;
    streamReport = JRLoader.getFileInputStream(“src/DatabaseClient/CetakPenerimaan.jrxml”);
    //map.put(JRParameter.REPORT_DATA_SOURCE, DatabaseUtilities.getConnection());
    JasperPrint report = null;
    try {
    report = JasperFillManager.fillReport(streamReport, null);
    } catch (JRException ex) {
    Logger.getLogger(MainClient.class.getName()).log(Level.SEVERE, null, ex);
    }
    JasperViewer.viewReport(report);
    } catch (JRException ex) {
    Logger.getLogger(MainClient.class.getName()).log(Level.SEVERE, null, ex);
    }

    tapi error, Error loading object from InputStream ,padahal uda keluar Jasper Viewer nya,tapi tanpa ada isi apapun..
    help me mas..

  5. mu tanya mas saya gunakan ireport 3.7.3 terus saya kompile dari dari netbeans ada pesan error padahal kalo pake 3.0.0 tidak ada masalah

    pesan errornya:
    org.apache.commons.digester.Digester error
    SEVERE: Parse Error at line 2 column 408: Document root element “jasperReport”, must match DOCTYPE root “null”.
    org.xml.sax.SAXParseException: Document root element “jasperReport”, must match DOCTYPE root “null”.
    …..
    ui.frmGolongan.btnCetakActionPerformed(frmGolongan.java:318)
    ……
    java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    err 2net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException: Document root element “jasperReport”, must match DOCTYPE root “null”.BUILD SUCCESSFUL (total time: 4 seconds)

    saya coba edit header .xml nya karna ada pesan “must match DOCTYPE” ngikutin .xml yang dihasilkan dari ireport 3.0.0
    errornya berkurang jadi mulai dari line 4:

    pesan errornya:
    org.apache.commons.digester.Digester error
    SEVERE: Parse Error at line 4 column 408: Attribute “xmlns” must be declared for element type “jasperReport”.
    ….
    err 2net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException: Attribute “xmlns” must be declared for element type “jasperReport”.BUILD SUCCESSFUL (total time: 5 seconds)

    sepertinya semakin banyak .xml yang diedit, errornya jadi makin sedikit, terus copy paste .xml yang dihasilkan dari ireport 3.0.0 semuanya, eh malahan keluar error panjang pisan

    error setelah diedit semua:
    java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException
    at java.lang.Class.forName0(Native Method)
    ………
    harus digiminain ya mas??

      • udah di tambahin mas,, pesan error nya jadi:

        Exception in thread “AWT-EventQueue-0” java.lang.NoSuchMethodError: org.codehaus.groovy.control.CompilerConfiguration.setUseNewGroovy(Z)V
        at net.sf.jasperreports.compilers.JRGroovyCompiler.compileUnits(JRGroovyCompiler.java:76)
        at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:190)
        at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:220)
        at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:153)
        at model.DBReport.generateReport(DBReport.java:42)
        at model.DBReport.displayReport(DBReport.java:32)
        …..
        …..

  6. iya betul mas…sekarang gada error lagi terimakasih banyak mas,,ternyata default language dari properties reportnya groovy..

  7. udah coba bikin sesuai di atas
    InputStream streamReport = null;
    try {
    streamReport = JRLoader.getFileInputStream(“report2/report2.jasper”);
    List list = new ArrayList();
    for (int i = 0; i < 100; i++) {
    Pegawai pegawai = new Pegawai();
    pegawai.setNip("10106031" + i);
    pegawai.setNama("Eko Kurniawan Khannedy");
    pegawai.setTanggalLahir(new Date());
    pegawai.setEmail("echo.khannedy@gmail.com");
    list.add(pegawai);
    }
    JRDataSource datasource = new JRBeanCollectionDataSource(list);
    Map map = new HashMap();
    map.put(JRParameter.REPORT_DATA_SOURCE, datasource);
    JasperPrint report = JasperFillManager.fillReport(streamReport, map);
    JasperViewer.viewReport(report);
    } catch (JRException ex) {
    Logger.getLogger(cAdvance.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    }

    muncul errror :

    Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
    at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
    at java.io.ObjectInputStream.(ObjectInputStream.java:280)
    at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.(ContextClassLoaderObjectInputStream.java:53)
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:193)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:396)

  8. mas khannedy help me,…q lg bljr java,..q udah nginstal ireport 3.7.4 terus koneksi databasenya dah bisa,…q mau munculin reportnya ke netbeans error terus q pakai netbeans IDE 6,…Q dah buat listing programnya gini di klas viewnya ni:

    private void makePreview(String vName){
    String reportSource;
    String reportDest;

    reportSource=AplikasiPerpusApp.ReportPath +
    “templates/” + vName + “.jrxml”;
    reportDest=AplikasiPerpusApp.ReportPath +
    “results/” + vName + “.html”;

    Map params = new HashMap();

    try {
    JasperReport jasperReport =
    JasperCompileManager.compileReport(reportSource);

    JasperPrint jasperPrint =
    JasperFillManager.fillReport(
    jasperReport, params, AplikasiPerpusApp.getDriver().getConnection());

    JasperExportManager.exportReportToHtmlFile(
    jasperPrint, reportDest);

    JasperViewer.viewReport(jasperPrint,false);
    } catch (JRException ex) {
    ex.printStackTrace();
    }

    terus muncul error :

    16 Agu 10 11:37:12 org.apache.commons.digester.Digester error
    SEVERE: Parse Error at line 2 column 438: Document root element “jasperReport”, must match DOCTYPE root “null”.
    org.xml.sax.SAXParseException: Document root element “jasperReport”, must match DOCTYPE root “null”.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1621)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1900)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:764)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1357)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1289)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3084)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:912)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
    at org.apache.commons.digester.Digester.parse(Digester.java:1647)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150)
    at aplikasiperpus.AplikasiPerpusView.makePreview(AplikasiPerpusView.java:543)
    at aplikasiperpus.AplikasiPerpusView.LptgsActionPerformed(AplikasiPerpusView.java:474)
    at aplikasiperpus.AplikasiPerpusView.access$2100(AplikasiPerpusView.java:31)
    at aplikasiperpus.AplikasiPerpusView$17.actionPerformed(AplikasiPerpusView.java:315)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at com.birosoft.liquid.LiquidMenuItemUI.doClick(LiquidMenuItemUI.java:492)
    at com.birosoft.liquid.LiquidMenuItemUI$MouseInputHandler.mouseReleased(LiquidMenuItemUI.java:1161)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException: Document root element “jasperReport”, must match DOCTYPE root “null”.
    at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:243)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150)
    at aplikasiperpus.AplikasiPerpusView.makePreview(AplikasiPerpusView.java:543)
    at aplikasiperpus.AplikasiPerpusView.LptgsActionPerformed(AplikasiPerpusView.java:474)
    at aplikasiperpus.AplikasiPerpusView.access$2100(AplikasiPerpusView.java:31)
    at aplikasiperpus.AplikasiPerpusView$17.actionPerformed(AplikasiPerpusView.java:315)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at com.birosoft.liquid.LiquidMenuItemUI.doClick(LiquidMenuItemUI.java:492)
    at com.birosoft.liquid.LiquidMenuItemUI$MouseInputHandler.mouseReleased(LiquidMenuItemUI.java:1161)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    Caused by: org.xml.sax.SAXParseException: Document root element “jasperReport”, must match DOCTYPE root “null”.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1621)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1900)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:764)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1357)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1289)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3084)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:912)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
    at org.apache.commons.digester.Digester.parse(Digester.java:1647)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239)
    … 36 more
    BUILD SUCCESSFUL (total time: 15 seconds)

    q udah masang file jar nya semua sesuai dengan petunjuk udah q ganti file grovy yg terbaru tp napa tetep masih error?errornya jg sama aja g ngaruh hix..hix…bantuin ya,….mksh

  9. mas eko,,kalo mau langsung cetak, jangan privew lagi gmn cara mas??saya pengen tekan tombol langsung ngeprint keluar kertas dengan setingan default printer saya..???

  10. mas.. mau tanya.. gimana caranya kalo kita ingin menampilkan judulyang terdapat di ireportnya…

    kalau dari contoh diatas kan memakai static text… nah, saya pengennya jdul itu diambil dari database…

    saya bingung bgaimana cara mengirim data yg bersifat looping dengan yg tidak looping (seperti judul tadi misalx).

    mohon pencerahannya mas…. 😀

  11. Kang, mau nanya nih.
    Saya buat report dengan ireport kemudian saya membuat program untuk menampilkan report tersebut. Report tersebut dapat tampil hanya bila saya menjalankan program dari netbeans. Kalau program saya jalankan sendiri, report tidak dapat ditampilkan. Mohon pencerahannya. terima kasih.

  12. mas tolong pencerahannya masi ad yang erorr nie
    erorrnya knp ya mas?? 🙂

    Exception in thread “main” java.lang.NullPointerException
    at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2264)
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2277)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2748)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
    at java.io.ObjectInputStream.(ObjectInputStream.java:280)
    at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.(ContextClassLoaderObjectInputStream.java:53)
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:193)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:396)
    at perpustakaan.main.TunggakanMain.main(TunggakanMain.java:39)
    Java Result: 1

  13. mas Eko kalo kita mau buat report yng berasal dari interface yg disharing pake rmi gimana….??
    jd data yg ditampilin dari database yg ada di server….

  14. Mau tanya mas…
    Punya saya kok error kayak ini yah?
    Exception in thread “main” java.lang.NullPointerException
    at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2265)
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2278)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.(ObjectInputStream.java:279)
    at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.(ContextClassLoaderObjectInputStream.java:57)
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:197)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:400)
    at lelut.helloword.Main.main(Main.java:61)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)

    source codenya kayak ini :
    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    package lelut.helloword;

    //import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; //for window view library

    import java.io.InputStream;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import lelut.helloword.con.DatabaseUtilities;
    import lelut.helloword.ent.Buku;
    import lelut.helloword.imp.ImpBuku;
    import net.sf.jasperreports.engine.JRDataSource;
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JRParameter;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
    import net.sf.jasperreports.engine.util.JRLoader;
    import net.sf.jasperreports.view.JasperViewer;

    /**
    *
    * @author sumberdana
    */
    public class Main {

    /**
    * @param args the command line arguments
    */

    ImpBuku daoBuku;

    public static void main(String[] args) throws JRException, SQLException {
    // TODO code application logic here
    InputStream streamReport = JRLoader.getFileInputStream(“/home/sumberdana/Documents/NetBeansProjects/helloWord-api/src/helloword/lelut/report/ReportUser.jasper”);

    Statement st=DatabaseUtilities.getConnection().createStatement();
    ResultSet rs=st.executeQuery(“select *from buku”);
    List list=new ArrayList();
    while(rs.next()){
    Buku o=new Buku();
    o.setJudul(rs.getString(“judul”));
    o.setPenulis(rs.getString(“penulis”));
    list.add(o);
    }

    JRDataSource datasource = new JRBeanCollectionDataSource(list);

    Map map = new HashMap();
    map.put(JRParameter.REPORT_DATA_SOURCE, datasource);

    JasperPrint report = JasperFillManager.fillReport(streamReport, map);

    JasperViewer.viewReport(report);
    }

    }

  15. kang saya ada masalah nih

    saya coba generate report ke docx
    nah disitu ada bagian footer
    nah pengennya report itu editable
    kapan ya jasper report itu user friendly? 😦

    masalah saya,..
    footer itu ga static ya? (ga dinamis)
    saya coba focus ke salah satu row di content dan coba klik kanan insert new row above/below
    itu footernya kok pindah ke halaman selanjutnya ya kang?
    T_T

    mohon dibantu

  16. Tx Mas buat Informasinya, tapi setelah saya coba sesuai script di atas
    kog muncul pesan error seperti ini yah???

    log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
    log4j:WARN Please initialize the log4j system properly.
    Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/beanutils/PropertyUtils
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
    at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
    at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:823)
    at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:787)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1478)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:125)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942)
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:118)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:435)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:398)
    at cobaReport.PegawaiMain.main(PegawaiMain.java:49)
    Java Result: 1

    MOHON PENCERAHANNYA mas, lagi butug banget neh buat nyelesain tugas
    Makasih sebelumnya

  17. Mau tanya kang eko.. klo untuk menangani Report Transaksi yang mempunya tabel master detail bagaimana ya untuk penanganan Listnya?? misalkan ada tabel penjualan dan penjualandetail. nah list mana yang diambil untuk mengisi DataSource dari List ?? yang nantinya akan dijadikan parameter pada method JRBeanCollectionDataSource(list) ; ??

    Makasih sebelumnya 🙂

  18. tanya kang … klo ane pake jesperReport di PHp gmn kang ..??? ada g cara untuk intergasinya.. soalnya ane pake PHP kang..

    Thanks b4..

  19. saya coba praktekkan semua tutornya tapi saya dapet masalah di code yang bagian

    // Menambahkan DataSource
    Map map = new HashMap();
    map.put(JRParameter.REPORT_DATA_SOURCE, datasource);

    map.putnya ga mau (error terus kenapa tuh ya?)

  20. mas, klo saya uda buat dgn j2ewizard utk jd file .exe, jasper report saya tidak terbaca, yg muncul file jasper tidak ketemu lokasi file : src/……../… .jasper. Apa perlu diubah String lokasi file yang telah kita buat atw bagaimana. Mohon pencerahannya

  21. bang, pemanggilan jasper report untuk aplikasi yang sudah di build apakah aplikasinya harus menggunakan konsep DAO?
    kalau yg langsung bisa tidak?
    mohon koreksi code pemanggilan yang saya buat ini :
    try {
    InputStream input = getClass().getResourceAsStream(“/Report/NotaPenjualan/notaPenjualan.jrxml”);
    JasperDesign JD = JRXmlLoader.load(input);
    param.put(“NomorNota”,txtNotaTr.getText());
    JasperReport report = JasperCompileManager.compileReport(JD);
    JasperPrint print = JasperFillManager.fillReport(report, param, db.getKoneksi());
    JasperViewer.viewReport(jasperPrint, false);
    System.out.println(report.getCompilerClass());
    } catch (Exception e) {
    System.out.println(e.getMessage().toString());
    }

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s