Print Banyak File PDF Sekaligus

Pekerjaan menggunakan komputer yang dilakukan berulang-ulang dan tidak membutuhkan banyak waktu untuk berpikir adalah jenis yang cocok untuk didelegasikan ke komputer. Salah satu contohnya adalah yang sedang dihadapi John sekarang.

Kode Lima Detik

import win32api
import win32print
from glob import glob

all_printers = [printer[2] for printer in win32print.EnumPrinters(2)]
printer_num = int(input("Choose a printer:\n"+"\n".join([f"{n} {p}" for n, p in enumerate(all_printers)])+"\n"))
win32print.SetDefaultPrinter(all_printers[printer_num])

directory = "D:\\folder\\berisi\\banyak\\file\\untuk\\dicetak\\*"
for f in glob(directory, recursive=True):    
    win32api.ShellExecute(0, "print", f, None, ".", 0)
    print(f)

Latar Belakang

Modern problems require modern solutions, adalah apa yang dihadapi John kali ini. Setelah berhasil mendownload banyak soal secara sekaligus menggunakan metode “modern”, sekarang ia terbentur masalah baru.

Pegimane caranye ngeprint ini barang, banyak bet dah!

Untuk soal kelas 3 saja terdapat 250 pdf files yang perlu dicetak. John sudah mencoba melakukan dengan cara paling mudah, buka satu persatu file lalu tekan tombol Print. Dan ia hanya berhasil pada 10 file pertama. Lepas itu John sudah kehilangan semangat melanjutkan prosedur yang sama untuk 240 file sisanya.

Karena John terlalu malas untuk menggunakan tangannya maka ia harus rajin menggunakan otaknya. John sadar itu.

“Masalah yang ditimbulkan oleh internet pasti ada solusinya juga di sana”, pikir John. Pencarian di internet membuahkan hasil, ada sebuah script sederhana yang dapat digunakan untuk mencetak semua file pdf yang dimiliki John.


Teknologi Digunakan

pywin32 adalah pahlawan bagi John. Library ini menyediakan akses ke banyak Windows APIs bagi Python. Salah satu yang disediakan adalah win32print untuk melakukan pencetakan.

Seperti namanya, teknologi ini khusus untuk Windows.


Langkah Kerja

Instalasi

Jika belum pernah melakukan instalasi library pywin32 dapat menggunakan perintah di bawah ini, melalui Command Prompt.

pip install pywin32

Atau dapat langsung melalui Jupyter Notebook.

Kode

Impor library

import win32api
import win32print
from glob import glob

Library win32api digunakan untuk mengeksekusi perintah cetak. Library win32print untuk berkomunikasi dengan printer. Sedang library glob digunakan untuk “membuka” file pdf satu per satu.

Pilih printer

all_printers = [printer[2] for printer in win32print.EnumPrinters(2)]
printer_num = int(input("Choose a printer:\n"+"\n".join([f"{n} {p}" for n, p in enumerate(all_printers)])+"\n"))
win32print.SetDefaultPrinter(all_printers[printer_num])

Variabel all_printers menampung daftar semua printer yang terinstall pada komputer. Variabel printer_num akan menampilkan daftar printer beserta nomor index, kemudian pengguna memasukkan nomor index printer yang akan digunakan.

Jika dijalankan pada Jupyter Notebook, kode akan membuat sebuah kotak input tempat kita memasukkan nomor index. Dalam gambar di atas terdapat 11 printer dengan index dari 0 sampai 10. Isi kotak input, misal dengan angka 8, kemudian Enter.

Baris terakhir kode menunjukkan library win32print akan menggunakan printer yang sebelumnya telah kita pilih.

Folder

directory = "D:\\basangdata\\cetak_banyak\\gs3\\*

Variabel directory menampung nama folder tempat bersemayam file pdf yang akan dicetak. Tanda \\ digunakan sebagai pemisah antar folder induk dan anak, di bagian akhir menggunakan tanda asterik/bintang yang menunjukkan semua file pada folder itu.

Cetak

for f in glob(directory, recursive=True):    
    win32api.ShellExecute(0, "print", f, None, ".", 0)
    print(f)

Perulangan dilakukan untuk “membuka” semua file pada folder, kemudian nama file disimpan dalam variabel f. Library win32api kemudian mengeksekusi perintah cetak pada masing-masing file.

Kode print(f) hanya sebagai penanda bahwa kode bekerja, dengan menampilkan file yang dicetak.


Simpulan

Setelah mencetak 100 file menggunakan cara di atas, John baru sadar “kenapa kaga gua gabungin aja jadi 1 file, abis tu baru diprint yak?”

“Ya udahlah, dah telanjur” insafnya, “setidaknya keliatan lebi canggih kalo pake kode-kode gini“.

Sekali lagi John membiarkan rasa malas mendikte hidupnya. Apalagi teknologi menopang kecenderungan itu.

Menurut Anda apakah rasa malas John adalah hal yang produktif? Malas tapi produktif, terdengar kontradiktif.


Referensi


Photo by Wendelin Jacober from Pexels

Leave a Reply

Your email address will not be published. Required fields are marked *