Hari ini saya tertarik untuk mencoba melakukan direct print menggunakan Node.JS. Setelah googling dan nyari di npmjs.org beberapa saat, ketemulah node-printer.

This package binds printers on POSIX and Windows OS from Node.js — node-printer desc

Hmmm, seem legit. Mari kita coba.

1. Buat project directory dan install package tersebut

$ mkdir node-printer
$ cd node-printer
$ npm install printer

Catatan: Jika anda menggunakan Ubuntu (atau distro linux lain) pastikan anda sudah menginstall libcups2-dev dalam sistem, jika tidak maka beginilah hasilnya

$ npm install printer
info attempt registry request try #1 at 09:56:27
http request GET https://registry.npmjs.org/printer
http 304 https://registry.npmjs.org/printer

> [email protected] install /path/to/node-printer/node_modules/printer
> node-gyp rebuild

/bin/sh: 1: cups-config: not found
gyp: Call to 'cups-config –libs' returned exit status 127. while trying to load binding.gyp
gyp ERR! configure error

2. Buat file baru dengan nama terserah, misal print.js

$ touch print.js

3. Buka file tersebut dengan editor kesayangan anda dan paste code berikut untuk melihat daftar printer yang tersedia

const printer = require('printer')

console.log(printer.getPrinters())

setelah itu buka terminal/cmd dan jalankan dengan perintah

$ node print.js

Wait! error?

$ node print.js
node: symbol lookup error: /path/to/node-printer/node_modules/printer/build/Release/node_printer.
node: undefined symbol: cupsGetDests

Oh! ternyata memang masih ada bug untuk versi ini (0.0.2) semoga lekas diperbaiki, solusinya adalah rebuild manual package ini. Ribet ye… :sweat_smile:

4. Jalankan lagi perintah node print.js

$ node print.js
[ {
  name: 'Generic-CUPS-PDF-Printer',
  isDefault: true,
  options: {
    copies: '1',
    'device-uri': 'cups-pdf:/',
    finishings: '3',
    'job-hold-until': 'no-hold',
    'job-priority': '50',
    'job-sheets': 'none,none',
    'marker-change-time': '0',
    'number-up': '1',
    'ppd-timestamp': '*',
    'printer-commands': 'AutoConfigure,Clean,PrintSelfTestPage',
    'printer-info': 'Generic CUPS-PDF Printer',
    'printer-is-accepting-jobs': 'true',
    'printer-is-colormanaged': 'true',
    'printer-make-and-model': 'Generic CUPS-PDF Printer',
    'printer-state': '3',
    'printer-state-change-time': '1414049132',
    'printer-state-reasons': 'none',
    'printer-type': '8581196',
    'printer-uri-supported': 'ipp://localhost:631/printers/Generic-CUPS-PDF-Printer'
  },
  status: 'IDLE'
} ]

nah! diketahui bahwa saya menggunakan Generic-CUPS-PDF-Printer sebagai default printer, jaaaaaaaadi…

5. Mari kita langsung nyobain untuk printing menggunakan code berikut:

const printer = require('printer')

printer.printDirect({
  data: 'Test print using node-printer',
  printer: printerName,
  type: 'TEXT',
  success(jobID) {
    console.log(`Sent to printer with ID: ${jobID}`)
  },
  error(err) {
    console.log(err)
  }
})

Sekarang jalankan lagi perintah dibawah

$ node print.js

6. Perhatikan print job yang ada di statusbar atau system tray anda, apakah berjalan dengan baik?

Semoga bermanfaat 😬