java print raw text di ubuntu

pada beberapa kasus, print dot matrix tidak bisa digantikan. tutorial ini membahas bagaimana membuata aplikasi java berbasis web bisa print raw text di printer dot matrix.

beberapa model bisnis masih memanfaatkan kekuatan print dot matrix untuk membuat copy receipt dengan warna slip yang berbeda beda. sudah menjadi sesuatu yang umum, customer menerima slip asli, dan kita menyimpan copy dari slip asli, dan copy  slip asli ini tidak bisa didapatkan kecuali di print pakai printer dot matrix.

berbeda dengan laser jet printer atau ink jet printer, dot matrix tidak bisa print file pdf. ya bisa sih bisa, tapi hasilnya jelek, printer dot matrix akan memperlakukan pdf seperti image, dan tidak bisa diatur margin kiri/kanan/atas/bawah, dan tidak bisa diatur tinggi dan lebar kertas. sementara umumnya aplikasi web, dokumen di conversi ke pdf dulu untuk kemudian di print.

pada dasarnya printer dot matrix jika di colok di usb di ubuntu, akan muncul sebagai device di /etc/usb. dalam kasus saya muncul sebagai /etc/usb/lp1. hak akses atas printer lp1 ini adalah root dan lp, saya sudah menambahkan user saya dalam group lp, tapi tidak berhasil, ketika print, tetap error karena permission denied. akhirnya pakai jurus yang agak kasar, yaitu change permission dengan menjalankan perintah sudo chmod 666 /etc/usb/lp1. kelemahan metode ini adalah jika usb printer dilepas dan dicolok kembali, maka proses mengganti permission harus dilakukan ulang. tapi setidaknya, bisa dipakai untuk ujicoba printer. caranya? jalankan saja perintah

echo "this is test print text" > /dev/usb/lp1

perhatikan, printer akan mencetak string this is test print text, dan langsung stop. kenapa? karena memang ini adalah print raw text, bukan print pdf atau file-file binary lainnya.

problem berikutnya adalah, pada aplikasi web, lokasi printer berbeda dengan lokasi aplikasi web itu berada. bisa jadi java web application ada di cloud, sedangkan printer ada di client. maka tidak bisa lagi pakai alamat printer /dev/usb/lp1. disinilah kita perlu phyton script jetpipe, yang bisa didownload disini. jetpipe akan di jalankan secara background (daemon). fungsi jetpipe ini adalah untuk mem-forward semua paket yang masuk di port dimana dia listen, ke printer (dalam hal ini lp1), sehingga kita bisa mengganti alamant printer dari /dev/usb/lp1 menjadi alamat ip dan port dimana jetpipe listen. kelemahan metode ini adalah security, dimana semua orang bisa mengirim paket ke IP dan port dimana printer ini berada.

cara menjalankan jetpipe adalah sebagai berikut:

./jetpipe /dev/usb/lp1 9100

perintah diatas maksudnya adalah menjalankan daemon jetpipe pada port 9100 dan semua paket yang masuk akan di-foward ke /dev/usb/lp1. disini kita bisa melakukan sedikit trik, utamanya kalau programmer anda tidak berada didekat printer. kita bisa lakukan trik untuk mengganti /dev/usb/lp1 menjadi file text. sehingga print dari java ke dot matrix printer akan diganti dengan print ke text file. dan jika sudah siap semua, barulah jetpipe di restart untuk dikembalikan ke /dev/usb/lp1.

saya akan memakai cara tricky tersebut dalam tutorial ini, supaya saya bisa menunjukkan hasilnya pakai screenshot, bukan pakai photo hasil printing.

./jetpipe testprint.txt 9100

kemudian saya coba test print:

echo "zaien" > /dev/tcp/localhost/9100

hasilnya, bisa di test dengan cara berikut ini:

cat testprint.txt

hasilnya, file textprint.txt berisi string zaien. perhatikan, tidak ada line feed disana, mengapa? karena dalam perintah untuk printing saya tidak memasukkan line feed. jadi ini membuktikan bahwa ini memang benar benar raw text printing.

langkah berikutnya, membuat java application untuk print raw text ke ip localhost di port 9100

String textToSend = "this is test print text via java web apps"
 
 //send text to printer
 Socket socket = new Socket("127.0.0.1", 9100);
 byte[] b = textToSend.getBytes(Charset.forName("UTF-8"));
 socket.getOutputStream().write(b);
 socket.close();

jalankan kode java diatas, dan cek isi file testprint.txt, dan wohaaa, file itu berisi string this is test print text via java web apps. jika printer tidak berada di localhost, maka tinggal ganti IP saja. untuk meningkatkan security, bisa diatur via jaringan, dimana hanya packet dari IP tertentu saja yg boleh masuk ke IP printer di port 9100.

demikian, semoga membantu.

Advertisements

3 thoughts on “java print raw text di ubuntu

    1. bisa-bisa saja tapi hasilnya tidak bagus, sebab pdf diperlakukan sama dengan image. selain lama, hasil print nya tidak pixel perfect.

      Like

      1. kelebihan lain dari print raw text adalah tidak perlu driver, hanya perlu protokol inisiasi printer saja, jadi kita bisa memanfaatkan, raspberry misalnya, sebagai print server berbasis linux, dan openbravo tetap bisa di server/cloud. client tidak harus terhubung dengan printer secara langsung untuk proses printing. print raw text juga extra cepat sebab yang dikirim memang binary string.

        Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s