24 Maret 2009

PHP dan printing ke continuous form

Divisi Material Warehouse sebelumnya pake Windows + OpenOffice.org dan juga dengan custom program bikinan programmer sini (dibuat pake Delphi bajakan). Karena programmer udah selesain versi webbasenya, ke 14 komputer diberi kesempatan nyoba selama satu minggu. Dan genap setelah lewat satu minggu, nggak ada komplain, langsung semua diganti ke Ubuntu Linux 8.04 LTS Edition.

Linux baru jalan 3 hari, manager divisi Material Warehous komplain. Tentunya dengan beberapa kendala yang dia temukan selama pake Linux. Tapi nyatanya kendala bukan pada Linuxnya. Linux + OpenOffice.org kan udah banyak di semua departemen. Dan manager itu tau tentang hal ini. Rupanya kendala menggunakan program baru webbasenya. Duh ...

Gue sempet komplain ke dia. Selama satu minggu tanpa ada kabar dari divisinya. Setelah pake Linux, baru ribut. Itu artinya divisi dia selama masih pake Windows, nggak coba program webbasenya. Dan jelas dari detail komplainnya, dia komplain program webbasenya nggak bisa cetak ke continuous form. Keluhan yang laen langsung diselesaiin programmernya dalam hari itu juga.

Hal laen, ini pengalaman baru juga buat gue. Webbase program dengan cetak ke continuous form. Kalo continuous from ukuran Letter/A4 sih tau lah. Gampang cing. Tapi kali ini bener-bener continuous form yang ukurannyanya nggak umum (custom paper). Sempet pusing cari solusinya. Sedangkan programmer, tentu saja gue harus bantu. Mereka baru tau Linux dan webbasenya. Kadang masih nggak pede aja. Tapi gue bersikeras, pasti ada solusinya. Pasti itu !!!

Susah emang nyari di Google. Nggak ketemu sama skali penggunaan custom paper di CUPS. Sebelumnya webbase udah generate report dalam format PDF dengan ukuran custom paper yang kita punya. Nyatanya cetak PDF file tersebut ke printer Epson LQ300+ selalu melaju sama aja seperti cetak ukuran Letter/A4. Sehingga pergantian halaman antar formnya jadi nggak tepat. Bener-bener kelihatan nggak prof deh :-(

Sempet puyeng juga seharian obok-obok banyak forum/milist tentang dot matrix printer dan Linux. Sepertinya susah. Bahkan sangat susah deh... dalam hal nemukan dokumentasi tentang ini di blog yang ada. Tapi nggak sengaja setelah baca-baca dokumentasi CUPS, perintah consolenya dan options-optionsnya. Well ... jadi inget tentang program MSDOS 15 tahun lalu. Gemana cara program kuno ikut handle percetakan continuous form. Akhirnya... ktemu juga. Ternyata mudah jadinya :-D

Printing ke dot matrix (continuous form)

Di Linux percetakan dokumen akan di handle CUPS service. Dokumen yang kita cetak, akan diproses CUPS, lalu dikirim ke printer. Umumnya berupa image. Hal ini nggak beda sama Windows OS juga kan.

Coba balik ke masa silam. Program MSDOS cetak ke dot matrix bukan mengirimkan image. Melainkan murni text files saja. Dan juga beberapa ESC code tambahan untuk berkomunikasi dengan printer. Dan ESC code ini sangat tergantung dengan merk/model printer dot matrix yang kita punya.

CUPS memiliki option "raw" printing. Itu artinya, program webbase yang kita bikin harus bisa menghasilkan text file yang akan di cetak. Lempar text file tersebut ke CUPS server. Dengan option raw printing, text file tersebut nggak akan di proses oleh CUPS, melainkan langsung dikirim ke dot matrik printer.

PHP dan CUPS

PHP for Windows dilengkapi fungsi printing. Sayangnya PHP for Linux secara official belum dukung CUPS. Untungnya ada class non official bisa nangani cetak ke CUPS printer. Coba cek lebih jauh ke phpprintipp. Udah dilengkapi paket DEB untuk Debian/Ubuntu.

Karena kita ada satu printer dot matrix di sharing untuk semua Linux, tentunya CUPS harus di share untuk semua. Sehingga semua client Linux bisa mengaksesnya. Dan phpprintipp bisa menggunakan printer tersebut dengan mudah. Cek link ini untuk tau cara shari printer di CUP (link).

Hasilnya

Sekarang webbase programnya udah kelar. Bahkan lebih profesional tuh. Dari webnya, tinggal klik tombol print, bisa langsung cetak ke continuous form. Nggak perlu pake PDF lagi. Dan programmer sini bisa senyum lagi :-D

Sapa bilang hanya pake Windows bisa kerja???


32 komentar:

steven mengatakan...

Selamat malem (20.33 WIB), saya tertarik dengan artikel bapak yang ini.

Saya ingin menanyakan sesuatu.Saya berencana ingin membuat sistem printer wireless untuk usaha saya.

Apakah bapak mempunyai ide bagaimana membuat ini berjalan, karena saya mencari lewat googling nggak ketemu-ketemu.

Saya kepingin nya printer saya sambungkan dengan printer server wireless yang mempunyai beberapa vendor seperti linksys, d-link, dll dan langsung jalan.

Tapi sepertinya nggak semudah itu ya. Sepertinya harus menyesuaikan antara printer yang dipakai dan print server wireless yang ada.

Apakah di kantor Bpk yang di Thailand ada yang memakai wireless printing system seperti ini ? Jadi kita mau print di mana pun bisa :) Ada solusi Pak ?

Thanks in advance

ary mengatakan...

gw dah obok2 settingan ubuntu termasuk setting raw printer. nama printernya epson lq 2180. ada nya di windows client. koneksi pakai samba kombinasi cups. ketika print slip gaji pakai jsp, yang keluar kata2 mutiara yg ndak tau artinya. pas nyoba ngeprint lsg dari servernya juga sama, keluar kata2 mutiara. ada solusi? gw pakai ubuntu 8.10 server.

Lutfi mengatakan...

To Steven,

Sorry nih. Disini gue nggak pake print server wireless. Pernah nyoba D-Link skali. Ternyata nggak semua merk di dukung.

Akhirnya semua printer pake print server biasa. Dan semuanya tersambung ke Linux server (dgn CUPS). Dan semua client Linux bs menikmati tanpa perlu setting lagi.

Lutfi mengatakan...

To Ari,

Sebenernya lokasi printer nggak masalah deh. Di local, remote atau di windows client. Asal printer itu udah di tambahkan ke CUPS, tentunya CUPS bs langsung menggunakannya.

Cuman ada 1 hal yg gue heran. Script JSP? Sorry gue nggak terlalu tau JSP. Kan artikel ini gue bahas dr PHP. Dengan gunakan PHP class "phpprintipp", scripting PHP bisa langsung cetak ke printer.

Coba aja install "phpprintipp" di web server loe. Disitu disertakan sample files nya. Loe bisa coba pake untuk cetak. Dan di websitenya ada detail dokumentasi kalo mau lebih advance.

Sejauh gue tangkep dr dokumentasi CUPS:

"CUPS understands many different types of files directly, including text, PostScript, PDF, and image files."

Jadi simple aja. Dari PHP script, generate aja report dlm format PDF, langsung di lempar ke printer di CUPS.

Atao bisa di coba ini dr console:

lp -d lq300 filename.pdf

Kalo raw printing:

lp -d lq300 -o raw filename.txt


Lengkapnya tutorial CUPS:

http://localhost:631/help/options.html?TOPIC=Getting+Started&QUERY=

ary mengatakan...

trims lutfi, emang sih topiknya tentang PHP, tp gw butuh pendapat soal setting printer di linux. Alhamdulillah driver printernya dah dpt dan bisa diinstal di ubuntu. dan dah bisa nyetak pake continous form. tapi anehnya koq marginnya selalu turun ya? jadi ketika ngeprint form yg ke 5, margin atasnya turun jauh banget dari form 1, sekitar 1 cm dan terus turun utk form berikutnya.
ada solusi.

Lutfi mengatakan...

Ada 2 perbedaan cetak ke printer dgn CUPS:

1. Kendali di CUPS. Jadi margin, ukuran kertas, ganti halaman, dll smuanya CUPS yg atur. Command di consolenya spt ini:

lp -d lq300 filename.pdf

Produce aja PDF lalu di lempar ke CUPS. Selanjutnya kendali di CUPS. Abis cetak, CUPS akan ganti kertas. Cara ini gue coba nggak cocok utk cetak continues form. Tapi cocok utk cetak Letter/A4 form.

2. Kendali di printer dotmatrix (misal Epson LQ-300). Jadi CUPS nggak pegang kendali. Semua paket di kirim ke printernya sbg raw data. Itu berarti loe hrs belajar ESC Command di dotmatrix Epsonnya. Krn ESC command ini utk mengendalikan printernya.

lp -d lq300 -o raw filename.txt

Program loe hrs produce file TXT dan lempar ke CUPS sbg raw data. Jadi kalo yg dicetak 1 baris, maka printer dotmatrix akan cetak baris itu aja (head langsung berhenti). Kalo loe tambahkan ESC Command ganti baris (ke dalam file TXT tadi), head printer akan prindah ke baris berikutnya.

ESC Command byk tutorial di Internet. Spt ganti baris, ganti halaman, cetak tebal, cetak condensed, etc.

OK. Smoga jelas yah

bodrex mengatakan...

Yth bang lufti

mungkin saya memiliki kasus yang sama seperti artikel anda. hanya beda OS. saya menggunakan OS windows. webbased php

saya ingin mencetak form form yang saya buat pada printer dot matrix. klo saya menggunakan window.printer
keluarnya lama. intinya boleh dong saya di kasih pencerahan bagimana mencetak diprinter dot matrix tanpa melibatkan window.printer
jadi begitu pencet tombol print langsung kirim ke printer. dan cetakan dalam format text asci bukan grafik.

mohon bantuannya
bodrex@gmail.com

Lutfi mengatakan...

Hi Bodrex,

Sejauh ini gue udah implement di Linux. Dah berhasil dengan baek. Di windows blon coba. Karena emang semuanya disini kita bikin utk sistem cross platform. Tapi sepertinya bisa deh. Gue dah baca di manual PHP, PHP for Windows bisa langsung cetak ke printer juga. Jgn tanya buktinya yah. Tapi dr referensi ini loe bs telaah lebih jauh.

Mengenai beda percetakan raw data (text file) maupun yg non raw data (PDF), coba baca jawaban gue persis sebelum pertanyaan dari loe.

Jadi untuk cetak langsung ke printer, webbase PHP loe harus produce file TXT. Dan send file TXT tadi sbg raw data. Gue asumsikan pake Epson printer. Jadi kendalinya di printer Epsonnya.

Selanjutnya coba gunakan fungsi ini:

http://us2.php.net/manual/en/refs.utilspec.windows.php

Dan loe butuh PECL printer (for Windows) ini:

http://us2.php.net/manual/en/printer.installation.php

Pada "printer_set_option", selanjutnya pake options "raw".

http://us2.php.net/manual/en/function.printer-set-option.php

OK. Silakan cek lebih jauh ttg PECL printer (for Windows). Loe bisa coba langsung baca manual diatas dr webnya. Bbrp contoh bs loe coba skalian.

Goodluck

Anonim mengatakan...

wah artikel nya menarik.
jadi bisa ya untuk di linux, kebetulan mau printing raw(pake esc command) di linux pake aspx.
pake CUPS juga ya pak?

Lutfi mengatakan...

"phpprintipp" class itu utk PHP cetak ke CUPS printer. Kalo pake aspx, sorry. Gue nggak pernah coba aspx :-D

irfan mengatakan...

permisi. mau tanya. kalo untuk epson lq-1170 di ubuntu gimana ya. aq cari drivernya untuk cups kok ga ada

Lutfi mengatakan...

Coba baca ini utk tau drivernya:

http://www.openprinting.org/show_printer.cgi?recnum=Epson-LQ-1170

Goolduck

budiwijaya mengatakan...

Kalo di lp kan ada opsi cpi (char per inch)? kalo di phpprintpp ada gak mas? Aku cari2 kok gak ada kayaknya ya? Butuh yg bisa ngeset cpi dan lpi nih..

--budiw

Lutfi mengatakan...

Hi BudiW,
Yap. Gue nggak nemukan penggunaan option itu. Coba cek langsung ke supportnya or mailinglistnya. Sapa tau dapat bantuan lebih.

Penggunaannya disisi sini justru pake raw data. Jagi semua option adalah option di Epson dotmatriknya (bukan option di CUPSnya). Dan ESC command dr epson udah include utk mengatur cpi/lpi itu.

egar mengatakan...

ry nih nimbrung : tapi gw mash pake windwo ehehe, gimana yah om? kebetulan saya bikin POS pake PHP dan printer EPSON TM-U220. udah bisa ngeprint tapi yah itu masih dari client alias window.print(); kalo yg di bahas d atas kebanyakan di linux yah giman untuk window om? biar bisa print teks melalui port serial ke print nya

thnx yah om

Lutfi mengatakan...

@egar:
ya jelas Linux lah. Kan emang blog ini seputar Linux. Jadi lebih fokus gmn Linux bs menyelesaikan smua masalah. Kalo utk Windows, coba ke sini:

http://www.php.net/manual/en/book.printer.php

Gue blon coba yg ini. Jd kl kesulitas, langsung tanya ke sana yah.

fr4n6 mengatakan...

@lutfi atau teman2 lainnya yang udah bisa pake PHP pada windows base dan sudah berhasil dengan scriptnya untuk mencetak pada kertas continuous form, mohon di share dong, gw butuh neh

sebelumnya, thanks berat

obels mengatakan...

hallo...saya nimbrung yah..mau tanya nih, sy install ubuntu 10.lts, pake wine versi.1.1.39, saya instal di laptop dan pc, dg aplikasi yang sama sy coba ngeprint outputnya .txt ke printer samba yg dishare. Kalo diprint lewat laptop respon nyetaknya cepat, tapi kalo dari pc responnya knp lama yah ..,apakah cupsnya harus sy update ..? mohon bantuannya yg lebih faham ..terimakasih.

mansyur mengatakan...

Mohon maaf, saya ingin bertanya juga masalah printing continues form. Gimana cara setting dan penggaturannya jika servernya adalah linux sedangkan client dan servernya ada di windows. Mohon dengan sangat pencerahannya. Soalnya tiap kali cetak continues form maka margin selalu turun.

mansyur mengatakan...

mohon maaf maksud saya client dan printernya di windows.

Lutfi mengatakan...

@fr4n6: Untuk Windows, PECL nya sampe sekarang nggak jelas. Tapi kalao mau coba (gue sendiri nggak bs nyoba saat ini), aktifkan IPP service di IIS (Windows Vista, 7, 2008server), lalu coba gunaka PHPPrintIPP. Met coba.

@obels: Yg loe tanyakan diluar bahasan artikel ini. Sorry yah :-D

@mansyur: Yg loe tanyakan diluar bahasan artikel ini. Sorry yah :-D

fr4n6 mengatakan...

@Lutfi : ok thanks infonya

@untuk teman-teman yg lain sedikit membantu, beberapa printer bisa di setting kertas nya melalui :
1.pergi ke start - printer & faxes
2.pilih file - server properties
3.dah bikin aja form kertas barunya di sono

semoga membantu

catatan : ngga semua printer bisa ya, so far Epson LX 800 gw bisa sih

99 mengatakan...

Dear Kak Lutfi,

Apakah Kakak ada petunjuk untuk menginstall mini printer dot matrix epson TM U220 usb di ubuntu 10.04?soalnya printer ini tidak ada drivernya, saya sudah googling belum ketemu.

Salam,

Candra

Lutfi mengatakan...

@99/Chandra:
Coba googling deh untuk cari manualnya. Byk tuh di internet. Tapi umumnya printer-printer dot matrix pake text doang.

surya sukron mengatakan...

met malem gan, ane mo nanya neh. maaf klo mungkin terlalu dangkal ilmu gw. Ane mo cetak struk dari PHP yg udah di set melalui CSS maupun PDF ke dot matriks kagak bisa. Mulai dr halaman 2 udah mulai turun g beraturan sampai hal berikut2nya. Gmn solusinya y gan. Mohon Penjelasan dan sarannya. Thanks

Lutfi mengatakan...

@surya: lah iya. di artikel blog ini jelasin masalah yg kamu tanyakan. baca dan nikmati aja ;-)

Anonim mengatakan...

Saya RIKI RINALDI
Halo Rekan2 Programer...
Saya punya problem, tolong di bantu donk... Saya bikin program penggajian pakai PHP dan MySQL, ketika load data ke browser untuk menampilkan slip gaji ternyata berat.
Saya butuh Script PHP untuk setting kertas dan kirim data langsung ke Printer Dot Matrix Epson LX-300+ tanpa view data ke browser, di bantu donk teman2.....
Thank's before..

Binladien mengatakan...

agan..., saya punya masalah ngeprint pdf file ke printer dot matriks. masalahnya, gimana caranya supaya dari pdf bisa ngeprint dg ukuran A5 / setengah dari A4?tanpa merubah2 file pdf itu sendiri, jadi settingan printernnya seperti apa.Mohon bantuan dan pencerahannya nih.
terima kasih

ekaperintis mengatakan...

artikelnya sangat membantu, saya mau tanya, apakah webbase tersebut diletakkannya di OS linux juga atau di server windows ???

Terima kasih

Ferry Liu mengatakan...

Saya lagi butuh Programer yang bisa Program continuos form.
untuk wilayah jakarta barat, jika ada hub 085782468995- ferry. thx.

Stie Aub mengatakan...

mas boleh gak minta contoh source sederhananya saja utk cetak ke kertas continous nya, thanks

Stie Aub mengatakan...

gimana cara install "phpprintipp" di web server localhost di windows mas, thanks