ANNAS TRI WIDAGDO/PORTFOLIO · 2026
VOL. 01 // TECHNICAL ARCHIVE
■annastriwidagdo.me
SOFTWARE ENGINEER·FULL-STACK WEB DEVELOPER·MACHINE LEARNING ENGINEER
ENTRY 001MEMBUKA ARSIP TEKNIS00% · 01 / 01
Lewati ke konten
■annastriwidagdo.me
  • 01Beranda
  • 02Tentang
  • 03Proyek
  • 04Blog●
  • 05Kontak
LANGEN/ID
■annastriwidagdo.me
  • Software Engineer
  • Full-Stack Web Developer
  • Machine Learning Engineer

JAKARTA, INDONESIA · UTC+7

EMAILannastriw6@gmail.com↗ (dibuka di tab baru)LINKEDIN/in/annastriw↗ (dibuka di tab baru)GITHUB@annastriw↗ (dibuka di tab baru)CONTACTBuka Kontak→

© 2026 Annas Tri Widagdo. Drafted in grids, shipped in code.

←Kembali ke indeksBLOG / 03
[CATATAN // 03]/Android dan Hardware·3 menit baca

Dari Android Print Framework ke ESC/POS

Di dalam PrintService Kotlin yang mengubah print job PDF Android menjadi data raster monokrom terkalibrasi untuk printer termal Bluetooth 58 mm dan 80 mm yang dipilih.

Ditulis olehAnnas Tri Widagdo
  • #Kotlin
  • #Android
  • #PrintService
  • #Bluetooth
  • #ESC/POS
[01]

Menghubungkan Android ke Printer Termal Bluetooth

Aplikasi kasir (point-of-sale) dan logistik sering kali perlu mencetak struk pada printer termal yang ringkas. Alih-alih mewajibkan setiap aplikasi Android menulis kode Bluetooth khusus untuk berbagai merek printer, Thermal Printer Service dibangun menggunakan Kotlin sebagai PrintService native Android dengan PrinterDiscoverySession.

Desain ini terhubung langsung ke dialog cetak standar Android. Kapan pun pengguna memilih Cetak pada aplikasi Android apa pun, dokumen diteruskan ke layanan sebagai file PDF sementara, sehingga proses penyesuaian skala, pemformatan, dan transmisi Bluetooth dapat ditangani secara otomatis di latar belakang.

Antarmuka Android Thermal Printer Service untuk pengaturan printer dan konfigurasi profil
Layar konfigurasi Android native yang mengelola profil printer aktif, offset, dan pairing Bluetooth.
[02]

Mengubah Halaman PDF Menjadi Raster Titik Termal

Printable width 58 mm
432 dots
Printable width 80 mm
576 dots
Resolusi
203 DPI
Chunk write maksimum
1,024 bytes

Saat print job diterima, PdfRenderer bawaan Android mengubah setiap halaman PDF menjadi bitmap berkualitas tinggi. Karena ukuran dokumen standar tidak sesuai dengan kertas struk termal yang sempit, layanan ini otomatis memotong whitespace yang tidak terpakai, memusatkan teks, menerapkan padding atas dan bawah, serta menyesuaikan ukuran gambar dengan lebar head printer (432 dots untuk kertas 58 mm atau 576 dots untuk 80 mm pada 203 DPI).

Bitmap yang telah disesuaikan kemudian diubah menjadi gambar monokrom biner, di mana setiap piksel hitam mewakili titik panas pada kertas struk.

[03]

Membuat Perintah ESC/POS dan Mengelola Profil

  1. 01Dokumen Android
  2. 02File PDF Sementara
  3. 03Bitmap PdfRenderer
  4. 04Crop Whitespace dan Skala
  5. 05Konversi Monokrom
  6. 06Raster ESC/POS 24-Dot
  7. 07Penulisan Bluetooth per Chunk

Printer struk termal tidak membaca file font yang rumit; printer hanya mencetak titik hitam-putih berdasarkan instruksi byte ESC/POS tingkat rendah. Aplikasi ini mengubah bitmap monokrom menjadi array byte raster ESC/POS 24-dot di memori, menyusun baris-baris data menjadi potongan yang siap dikirim.

Untuk mendukung berbagai model printer di lapangan, konfigurasi disimpan secara lokal menggunakan SharedPreferences dan JSON. Tampilan daftar RecyclerView yang praktis memungkinkan operator menyimpan dan beralih antar profil printer dengan mudah (mengatur alamat Bluetooth, lebar kertas, skala densitas, pemotong otomatis, dan offset margin).

[04]

Menangani Koneksi Bluetooth dan Background Job

  1. 01Periksa ketersediaan hardware Bluetooth, status aktif, dan izin runtime Android 12 atau yang lebih baru.
  2. 02Muat profil printer yang dipilih dan dokumen PDF sementara.
  3. 03Buka socket RFCOMM SPP dengan strategi 4 kali percobaan ulang menggunakan jeda backoff 0 ms, 200 ms, 500 ms, dan 1.000 ms.
  4. 04Jalankan proses pencetakan pada background single-thread executor dengan dukungan CancellationToken agar antarmuka Android tetap responsif.
  5. 05Kirim data ESC/POS dalam ukuran chunk hingga 1.024 bytes dan tutup socket dengan aman saat selesai atau dibatalkan.
Batas kompatibilitas

Proyek mendokumentasikan workflow Bluetooth ESC/POS terpilih. Proyek tidak mendokumentasikan tingkat kompatibilitas, dukungan untuk setiap vendor, atau benchmark keberhasilan print.

Dengan memisahkan rendering dokumen, encoding byte ESC/POS, dan pengelolaan koneksi Bluetooth ke dalam komponen-komponen terpisah, Thermal Printer Service menghadirkan pengalaman cetak struk yang lancar dan andal untuk penggunaan Android sehari-hari.

Pengalaman proyek terkait

Thermal Printer Service↗
← ARTIKEL SEBELUMNYAMengintegrasikan Machine Learning ke dalam Aplikasi Web
Semua Artikel
ARTIKEL BERIKUTNYA →Membangun Pipeline Speech-to-Text Praktis dengan Wav2Vec2 dan FFmpeg