JRXML Local Verification

From InfiniteERP Wiki
Revision as of 17:15, 16 September 2026 by Wikiadmin (talk | contribs) (Dokumentasi)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Halaman ini menjelaskan cara menguji file JRXML di laptop — compile dan render PDF tanpa men-deploy ke server InfiniteERP. Wajib dilakukan sebelum JRXML baru/diubah dipasang di server.

Kenapa Verifikasi Lokal

  • Kesalahan JRXML (ekspresi tidak valid, field tidak dideklarasikan, class salah) baru ketahuan saat compile — bukan dari membaca XML.
  • Menguji di server berarti menyentuh sistem produksi; di laptop cukup 1 perintah Java.
  • Klaim "compatible" harus dibuktikan dengan hasil compile terhadap versi library yang sama dengan server (6.0.0), bukan versi lain.

Classpath (Terbukti Jalan)

Unduh dari Maven Central, taruh dalam satu folder (misal lib6/):

Jar Fungsi
jasperreports-6.0.0.jar Engine report — versi sama dengan server
jasperreports-fonts-6.0.0.jar Font extension — sama dengan server
commons-digester-2.1.jar, commons-collections-3.2.2.jar, commons-beanutils-1.9.4.jar, commons-logging-1.2.jar Dependensi parsing
ecj-4.4.2.jar Compiler ekspresi (JDT)
itextpdf-5.5.13.3.jar Export PDF (JR 6.x memakai package com.itextpdf)
itext-pdfa-5.5.13.3.jar WajibPdfAWriter dipisah ke jar ini

Jebakan versi yang sudah ditemukan:

  • JR 6.x tidak memakai iText lawas com.lowagie (itu milik JR 5.x). Tanpa itextpdf, export gagal: NoClassDefFoundError: com/itextpdf/text/DocumentException.
  • Tanpa itext-pdfa, export gagal: NoClassDefFoundError: com/itextpdf/text/pdf/PdfAWriter.
  • Teruji jalan di Java 17.

Langkah

1. Compile

<syntaxhighlight lang="java"> JasperReport rep = JasperCompileManager.compileReport("report.jrxml"); </syntaxhighlight>

Compile sukses = JRXML valid dan kompatibel dengan JR 6.0.0.

2. Fill dengan data dummy

Report ber-query SQL tidak butuh database untuk diuji — lewatkan datasource map:

<syntaxhighlight lang="java"> Map<String,Object> row = new HashMap<>(); row.put("bpnmae", "PT CONTOH PELANGGAN"); row.put("pricestd", new BigDecimal("5000000")); // ... isi semua field sesuai deklarasi <field> di JRXML

Map<String,Object> params = new HashMap<>(); params.put("IMAGE_DIR", "/path/ke/folder/gambar");

JasperPrint print = JasperFillManager.fillReport(rep, params,

   new JRMapCollectionDataSource(java.util.Collections.singletonList(row)));

</syntaxhighlight>

Catatan: ImageIO membaca gambar berdasarkan konten, bukan ekstensi — file PNG bernama .jpg tetap ter-render (berguna untuk placeholder).

3. Export PDF

<syntaxhighlight lang="java"> JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "sample.pdf"); exporter.exportReport(); </syntaxhighlight>

Jalankan: java -cp ".:lib6/*" NamaVerifier

4. Cek hasil

  • Buka PDF dan periksa visual: overlap, teks terpotong, alignment angka.
  • Untuk elemen grafis kritis (accent bar, latar blok), bisa dicek deterministik: konversi PDF ke PNG lalu baca warna piksel pada koordinat yang diharapkan. Cara ini terbukti menangkap bug outline hitam pada <rectangle> (lihat JRXML Best Practices).

Hasil yang Pernah Diverifikasi

  • sales_invoice_SSD.jrxml (asli, iReport 5.6): compile OK di JR 5.6.0 dan 6.0.0
  • Versi perbaikan (parameter IMAGE_DIR, variable mati dihapus): compile + render OK
  • Layout modern tanpa border penuh: compile + render OK, cek piksel lolos