Tentu, berdasarkan spesifikasi BMP dan dokumen arsitektur yang sudah kita bangun, berikut adalah daftar lengkap package Elixir yang dapat digunakan, dikelompokkan berdasarkan fungsinya.
📄 PDF Generation
| Package | Pendekatan | Kelebihan | Kekurangan | Cocok untuk BMP |
|---|---|---|---|---|
| Tincture | Pure Elixir (PDF primitives) | Zero dependencies, output terverifikasi PDF/A & PDF/UA (standar arsip & aksesibilitas), dukungan font & hyphenation, AES-256 encryption. | Write-only; perlu mendesain layout dengan kode (tidak dari HTML). | Sangat Cocok untuk dokumen legal/arsip (Invoice, Packing List, Slip Gaji) yang memerlukan standar kepatuhan tinggi. |
| PrawnEx | Pure Elixir (PDF primitives) | Mirip Ruby's Prawn, familiar, support tabel & chart, pure Elixir tanpa dependensi eksternal. | Belum mature (0.2.0), tidak disebutkan dukungan PDF/A. | Alternatif untuk dokumen sederhana jika ingin gaya sintaks mirip Prawn. |
| ChromicPDF | Headless Chrome → PDF | Fidelitas tinggi (render HTML+CSS sempurna), dukungan header/footer, bisa konversi ke PDF/A-2b/3b via Ghostscript. | Membutuhkan Chromium & Ghostscript terinstall (beban server). | Cocok untuk dokumen dengan desain kompleks jika sudah punya template HTML (misal dari Phoenix.View). |
| pdf_generator | Wrapper wkhtmltopdf / Chrome | Support wkhtmltopdf & headless Chrome, fleksibel. | Memerlukan wkhtmltopdf atau Node.js (puppeteer) terinstall. | Alternatif jika ChromicPDF terlalu berat atau ingin opsi wkhtmltopdf. |
| PDFShift | API (Cloud) | Zero dependency server-side, mudah digunakan, support berbagai opsi rendering. | Berbayar (berdasarkan kredit), bergantung pada internet & pihak ketiga. | Opsi jika tidak ingin mengelola infrastruktur rendering PDF sendiri. |
| Folio | Typst layout engine via Rustler NIF | Print-quality typesetting, input Markdown + Elixir DSL, Elixir-native concurrency, precompiled NIFs. | Memerlukan NIF (Rust), pendekatan unik yang mungkin butuh pembelajaran. | Opsi menarik untuk dokumen dengan layout tipografi tinggi (laporan, proposal). |
📊 Spreadsheet & CSV
Spreadsheet (XLSX)
| Package | Pendekatan | Kelebihan | Cocok untuk BMP |
|---|---|---|---|
| Exceed | Stream-oriented | Memory-efficient untuk dataset besar (streaming langsung ke file), API high-level. | Ekspor laporan besar (Sales Analytics, Stock Balance). |
| fast_xlsx_exporter | Stream-oriented | Sangat sederhana, writes langsung ke filesystem, memory-friendly. | Ekspor cepat untuk dataset besar, jika fitur Exceed terlalu kompleks. |
| UmyaSpreadsheetEx | In-memory manipulation | Fitur kaya: pivot tables, Excel tables, password protection, memory-optimized writer. | Jika perlu generate laporan dengan pivot atau manipulasi spreadsheet kompleks. |
CSV
| Package | Pendekatan | Kelebihan | Cocok untuk BMP |
|---|---|---|---|
| NimbleCSV | Binary pattern matching | Sangat cepat, custom parser definition, support streaming, RFC 4180 compliant. | Parsing CSV rekap marketplace (Speed & custom separator). |
| CSV | Binary pattern matching | RFC 4180 compliant, support streaming, graceful error handling (return {:ok, row} / {:err, msg}), cepat (~0.5M rows/dtk). | Alternatif dengan error handling yang lebih eksplisit. |
🖼️ Image & QR Code
Image Processing
| Package | Deskripsi | Cocok untuk BMP |
|---|---|---|
| Image | Image processing via libvips (bundled by default). Dukungan: resize, crop, rotate, draw, EXIF, color space, histogram, streaming, QR code (via optional deps). | Generate thumbnail produk, proses gambar untuk laporan, manipulasi gambar attachment. |
QR Code
| Package | Pendekatan | Kelebihan | Cocok untuk BMP |
|---|---|---|---|
| QRex | Rust NIF | High-performance decoding (detect multiple QR codes in image), precompiled NIFs. | Decode QR code (misal dari label produk). |
| Eqrcode | Pure Elixir | Zero dependencies, generate QR code ke SVG dengan opsi warna & bentuk. | Generate QR code (misal untuk label/kemasan). |
📌 Rekomendasi Prioritas untuk BMP
Berdasarkan kebutuhan BMP (stabilitas, kepatuhan, kontrol, dan beban server minimal):