• About
  • Contact
  • Sitemap
  • Privacy Policy

VISUAL C# No.48: Mengenal Printer API pada C# (Printing bag. pertama)


Cetak - mencetak dengan printer adalah sebuah hal yang sering kita lakukan dimanapun dan kapanpun. Sangat rugi bila anda sebagai seorang programmer .NET tidak paham bagaimana cara melakukan printing seperti ini.

Nah, pada tutorial ini kita akan mengenal Printer API pada C#. Bagaimana cara membuat sebuah aplikasi supaya bisa berinteraksi dengan printer. Serta kita akan mengenal namespace System.Drawing.Printing.




Pada tutorial ini saya menggunakan Microsoft Visual Studio 2013 Update 2 , untuk anda yang menggunakan IDE lain silahkan menyesuaikan.

Secara umum ada empat (4) proses yang perlu kita tahu saat kita akan mencetak (printing) baik teks maupun graphic, yaitu:

1. Menentukan Printer yang akan digunakan.
Sangat mungkin, pada komputer kita telah terinstall beberapa printer. Salah satunya pasti didefinisikan oleh system sebagai default printer. Sebetulnya kita bisa menentukan printer mana yang ingin kita gunakan. Bila kita tidak menentukan printer nya, maka system secara otomatis akan menggunakan default printer.

Pembahasan mengenai cara dan pengkodean untuk menentukan Printer mana yang digunakan akan kita bahas di bawah :)

2. Menentukan setting printer dan setting page (halaman / object) yang akan diprint.
Kita bisa mensetting printer kita, misalnya berapa copy yang ingin diprint, pilihan warna (berwarna atau hitam putih), dan lain – lain. Kita pun bisa menentukan setting page (halaman) / margin.

Sebetulnya untuk setting ini adalah optional, bila kita tidak memberikan settingan maka secara otomatis system akan menggunakan settingan default.

Untuk pengaturan seperti ini dan pengkodeannya akan kita bahas pada bagian bawah tutorial ini.

3. Membuat ‘print-page event handler’.
Event handler sangat penting digunakan dalam proses printing. Kita perlu membuat beberapa method / function untuk menghandle event – event ini.

Pembahasan tentang print-page event handler akan kita bahas pada bagian bawah.

4. Melakukan print terhadap document atau object.
Sudah jelas, kita tinggal memanggil method Print() dari class ‘PrintDocument’ yang akan mengirim bahan / object ke printer.

Yup, hanya empat (4) hal itu saja yang perlu kita pahami. Tapi jangan salah, teknis dan pengkodeannya juga lumayan bisa mengerutkan kening :)
Sebelum kita bahas point – point di atas satu per satu, perlu diperhatikan bahwa segala hal yang berkaitan dengan

printing terdapat dalam namespace System.Drawing.Printing sehingga anda harus menggunakan namespace tersebut pada bagian atas kode anda.

Apasih isi dari namespace System.Drawing.Printing tersebut?

Sama seperti namespace lain pada .NET, namespace ini mengandung bayak sekali Class, Delegates, dan Enumerations. Yang akan saya sebutkan hanya class saja yang terdapat dalam namespace ini diantaranya adalah sebagai berikut:
Public class InvalidPrinterException -> Represents the exception that is thrown when you try to access a printer using printer settings that are not valid.
Public class Margins -> Specifies the dimensions of the margins of a printed page.
Public class MarginsConverter -> Provides a MarginsConverter for Margins.
Public class PageSettings -> Specifies settings that apply to a single, printed page.
Public class PaperSize -> Specifies the size of a piece of paper.
Public class PaperSource -> Specifies the paper tray from which the printer gets paper.
Public class PreviewPageInfo -> Specifies print preview information for a single page. This class cannot be inherited.
Public class PreviewPrintController -> Specifies a print controller that displays a document on a screen as a series of images.
Public class PrintController -> Controls how a document is printed, when printing from a Windows Forms application.
Public class PrintDocument -> Defines a reusable object that sends output to a printer, when printing from a Windows Forms application.
Public class PrinterResolution -> Represents the resolution supported by a printer.
Public class PrinterSettings -> Specifies information about how a document is printed, including the printer that prints it, when printing from a Windows Forms application.
Public class PrinterSettings.PaperSizeCollection -> Contains a collection of PaperSize objects.
Public class PrinterSettings.PaperSourceCollection Contains -> a collection of PaperSource objects.
Public class PrinterSettings.PrinterResolutionCollection -> Contains a collection of PrinterResolution objects.
Public class PrinterSettings.StringCollection Infrastructure. -> Contains a collection of String objects.
Public class PrinterUnitConvert -> Specifies a series of conversion methods that are useful when interoperating with the Win32 printing API. This class cannot be inherited.
Public class PrintEventArgs -> Provides data for the BeginPrint and EndPrint events.
Public class PrintingPermission -> Controls access to printers. This class cannot be inherited.
Public class PrintingPermissionAttribute -> Allows declarative printing permission checks.
Public class PrintPageEventArgs -> Provides data for the PrintPage event.
Public class QueryPageSettingsEventArgs -> Provides data for the QueryPageSettings event.
Public class StandardPrintController -> Specifies a print controller that sends information to a printer.

Dari sekian banyak class seperti diatas, hanya beberapa class saja yang nanti akan kita gunakan pada pengenalan Printer API pada C# dan .NET ini nanti.

Mari kita bahas empat (4) point di atas satu – persatu.

1. Menentukan Printer yang akan digunakan


Seperti yang sudah ditulis di atas, kita harus memilih printer yang akan kita gunakan, bila tidak, maka system akan memilih printer default.

Pada bagian ini kita akan meloading semua printer ke dalam komponen comboBox.

Ada dua (2) komponen yang akan kita gunakan yaitu sebuah comboBox dengan nama ‘printerList’ dan sebuah button dengan nama ‘btnPrint’.
Lihat gambar 1:


Kita akan membuat kode untuk meloading semua printer yang terintall, lihat kode berikut ini:


Jangan lupa, terlebih dahulu kita harus menggunakan:

using System.Drawing.Printing;

Untuk memunculkan method Form1_Load() secara otomatis, anda bisa double click form yang sudah anda buat. Pada method Form1_Load() tersebut kita membuat sebuah ‘foreach’ loop. Looping ini akan mencari semua printer yang terinstall dengan menggunakan properties ‘InstalledPrinters’ dari class ‘PrinterSettings’. Kemudian hasil nya kita tambahkan satu persatu ke dalam komponen comboBox yang kita beri nama ‘printerList’ tadi.

Hasil dari running kode adalah seperti berikut,
Lihat gambar 2:


Bila printer anda sudah terintall pasti akan tertampil pada comboBox, ah, sayang sekali saya menulis tutorial ini pada komputer kamar saya, bukan pada komputer kantor :P jadi hanya printer di atas yang ada di komputer saya :P
Kita akan mencoba menambahkan method untuk button ‘coba print’. Pada method ini, kita sudah menginjak pada ‘print event’ dan ‘handler’ yang sebetulnya akan kita bahas pada poin berikutnya.



Anda bisa lihat, pada method di atas, kita membuat sebuah ‘PrintPage’ event dan kemudian membuat handler nya.

Pada PrintPageEventHandler kita memanggil sebuah method untuk men-draw (menggambar) sebuah object pada kertas kita. Method yang di panggil tersebut adalah ‘printHandler’.

Event handler ‘PrintPageEventHandler’ digunakan untuk menghandler ‘PrintPage’ event. Nah, pada point berikutnya kita akan membahas apa itu ‘PrintPage’ event dan event – event yang lain yang terjadi saat proses printing. Juga akan membahas handler untuk event – event tersebut.

Coba run dan click print, :)

2. Menentukan setting printer dan setting page (halaman / object) yang akan diprint.


Pada setting printers ini, sebetulnya banyak sekali setting printer atau properties printer yang bisa kita ‘get’ dan kita ‘set’ seperti:
*PrinterName
*PaperSizes
*Resolution
*Copies
*IsDefaultPrinter
*IsPlotter
*CanDuplex
*Collate
*IsValid
*SupportsColor
*dan lain - lain

Tetapi pada Printing Bag.Pertama ini kita akan hanya mencoba tiga (3) properties atau setting dari printer yang terseleksi yaitu PaperSizes, Resolution, dan Copies. Untuk yang lainnya akan kita bahas pada tutorial bagian berikutnya.

Cobalah tambahkan beberapa komponen untuk properties printer,
Lihat gambar 3:


Anda bisa lihat, pada tutorial ini saya menambahkan sebuah button ‘properties’ yang saya berikan nama ‘btnProperties’ dan juga sebuah ‘groupBox’ yang didalamkan ada tiga (3) buah komponen yang saya berikan nama:
comboBoxPaperSize
comboBoxResolution
textBoxCopies

Tiga komponen inilah yang nanti akan kita gunakan untuk ‘get’ dan ‘set’ printer kita.

Note: supaya ‘groupBox’ tidak terlihat sebelum user mengclick ‘btnProperties’ maka kita men-setting properties ‘visible’ untuk ‘groupBox’ ke false.

Saya akan menuliskan kode berikut ini:


Hasil dari running kode di atas adalah seperti pada gambar berikut ini:
Lihat screenshot:



Bagaimana cara kerja kode tersebut?

Method ‘btnProperties_Click()’ adalah sebuat method untuk komponen ‘btnProperties’. Untuk menambahkan sebuah method pada komponen button saat diclick, maka anda tinggal double click button tersebut pada Design Visual Studio.

Hanya ada satu (1) class dari namespace System.Drawing.Printing yang kita otak - atik pada method tersebut yaitu class ‘PrinterSetting’.

Pada class ini kita meloading properties ‘PaperSizes’ dan ‘PrinterResolution’. Setelah berhasil kita loading maka kita tambahkan hasil ke dalam masing – masing komponen comboBox. Mudah bukan?

3. Membuat ‘print-page event handler’.

Print Event

Sebelum memulai ‘print-page event handler’ ada baiknya kita memahami dulu tentang ‘Print Event’.
Pada saat proses printing, sebenarnya system melakukan beberapa event seperti ‘BeginPrint’, ‘PrintPage’, dan ‘EndPrint’.

-‘BeginPrint’ event adalah event yang terjadi saat memulai proses printing.
-‘PrintPage’ event adalah event yang terjadi saat sedang proses printing.
-‘EndPrint’ event adalah event yang terjadi saat proses printing selesai.

Secara umum proses dari printing adalah sebagai berikut:
Saat kita memanggil method ‘Print()’ maka segera setelah itu ‘BeginPrint’ event akan terjadi, kemudian system akan mengecheck apakah ada object yang akan di print.

Bila ditemukan object atau page yang akan diprint, maka ‘PrintPage’ event akan terjadi.
Ketika semua object / halaman telah tercetak maka ‘EndPrint’ event akan terjadi.


Mudah bukan?

Nah, untuk meng-handle event – event yang terjadi saat proses printing inilah kita membutuhkan yang namanya ‘event handler’. Seperti pada terjemahannya ‘event handler’ ini digunakan memang untuk meng-handle event – event yang occurred (terjadi) saat proses printing.

‘Event Handler’ yang akan kita gunakan pada tutorial ini adalah ‘PrintEventHandler’ dan ‘PrintPageEventHandler’.

PrintEventHandler biasanya digunakan pada event BeginPrint dan EndPrint, sedangkan PrintPageEventHandler digunakan pada event PrintPage.

Nah, mari kita modifikasi kode di atas, kita sesuaikan dengan ‘event’ dan ‘event handler’. Kode tersebut dapat anda lihat pada baris di bawah ini:



Perhatikan dan cobalah baca kode di atas.

Pada method btnPrint_Click() kita menambahkan event saat proses printing yaitu ‘BeginPrint’ , ‘EndPrint’ dan ‘PrintPage’ yang terdapat pada penggalan kode:

PrintDoc.BeginPrint += new PrintEventHandler(BeginPrintEH);
PrintDoc.EndPrint += new PrintEventHandler(EndPrintEH);
PrintDoc.PrintPage += new PrintPageEventHandler(PrintPageEH);

Dengan kita menambahkan event, maka kita pun harus memberikan ‘handler’ kepada masing – masing event tersebut.

Anda bisa lihat, class ‘PrintEventHandler’ digunakan untuk event ‘BeginPrint’ dan event ‘EndPrint’. Dan setiap event handler memiliki parameter yang mengarah pada method tertentu seperti ‘BeginPrintEH’ , ‘EndPrintEH’, dan ‘PrintPageEH’. Ketiga method ini memiliki peran masing – masing, semuanya bisa anda baca pada kode nya. ;)

Bagaimana? Mudah dimengerti kan??

4. Melakukan print terhadap document atau object.


Nah, sekarang, cobalah running kodenya, dan cobalah untuk melakukan printing.
Sampai disini dulu tutorial bagian pertama tentang printing. Kita akan mulai menginjak tutorial tingkat lanjut pada pertemuan berikutnya.

Sekian, semoga bermanfaat, salam.

J-Theme