Uvod u Windows štampanje

 

GDI+ je biblioteka klasa koja dozvoljava aplikacijama da komuniciraju sa uređajima za prikazivanje kao što su monitori, štampači, skeneri i sl. Na slikama je ilustrovana uloga GDI+ biblioteke u procesu crtanja figure na ekranu i u procesu štampe teksta.

  

Štampa iz windows forme

Štampanje iz windows forme zahteva prvenstveno komponentu PrintDocument koja omogućava štampu. Komponente PrintDialog, PrintPriviewDialog i PageSetupDialog obezbeđuju opšte poznati grafički interfejs za štampu za korisnike Windows operativnog sistema.

  

Proces štampanja

Na formu se dodaje objekat PrintDocument. Zatim se kreira se PrintPage event handler za ovaj objekat. Zatim se koristi PrintPageEventArg objekat ovog event hendlera da se pristupi tzv. Graphics objektu štampača. Ovaj objekat možemo shvatiti kao površinu za crtanje. Pomoću graphics objekta moguće je crtati linije, krive, tekst itd. koristeći draw ili fill metod ovog objekta.

 

Dijagram procesa štampanja

 

Na slici je ilustrovan dijagram toka procesa štampanja. Na već opisani način kreira se PrintDocument objekat i specificira se štampač. Zatim se setuju osobine štampača i osobine strane. Generiše se PrintPage event handler. Unutar ovog event handlera poziva se metoda Print PrintDocument objekta čime se vrši štampa.

 

Na ovoj slici je prikazan drugi deo dijagrama toka procesa štampanja koji je na prethodnoj slici označen sa A. Ovde je prikazana struktura event handlera za događaj PrintPage. Posle uzimanja Graphics objekta vrši se setovanje margina i ostala podešavanja strane. Koristi se neki od Draw ili Fill metoda ovog objekta za crtanje linija, oblika, pisanje teksta i sl.

  

PrintDocument objekat

Za slučaj štampanja tekstualnog fajla vrši se dodavanje PrintDocument komponente na windows formu a zatim se piše programska logika koja štampa fajl korišćenjem, PrintPage event handlera. PrintPage event handler generiše se dvostrukim klikom na PrintDocument komponentu. Event handler se izvršava nakon pozivanja Print metode objekta PrintDocument. Event hendleru se prosleđuje Graphics objekat koji se dobija pozivom svojstva Graphics PrintPageEventArgs klase.

  

Osobine PrintDocument objekta

Prikazaćemo važnije događaje, svojstva i metode PrintDocument objekta:

  • BeginPrint događaj se poziva pre nego što se prva strana dokumenta pošalje na štampu.
  • EndPrint događaj se dešava kada se poslednja strana dokumenta odštampa i može se iskoristiti da se pošalje signal korisniku da je ceo dokument odštampan.
  • PrintPage događaj se koristi za generisanje konteksta dokumenta za štampanje, dešava se za svaku stranu koja se štampa.
  • Print metoda šalje sadržaj dokumenta za štampanje predajući Graphics objekat uređaju za štampanje.
  • Dispose metod oslobađa sve resurse koje je zauzeo PrintDocument objekat.
  • DefaultPageSettings definiše podrazumevano setovanje za sve strane.
  • PrinterSettings svojstvo se koristi da bi se setovao štampač za dokument.

 

Provera instaliranih štampača

using System.Drawing.Printing;

private void Form2_Load(object sender, EventArgs e)
{
    if (PrinterSettings.InstalledPrinters.Count <= 0)
    {
        MessageBox.Show("Nije pronadjen stampac!");
        return;
    }
    // Uzmi sve dostupne printere i dodaj ih u
    // ComboBox
    foreach (String printer in PrinterSettings.InstalledPrinters)
    {
        printersList.Items.Add(printer.ToString());
    }
}

PrintDocument pd = new PrintDocument ();
pd.PrinterSettings.PrinterName = printersList.SelectedItem.ToString();
pd.Print();
 
 

Najpre je potrebno uključiti prostor imena System.Drawing.Printing. Korišćenjem svojstva InstalledPrinters klase PrinterSettings najpre se proverava da li na sistemu ima instaliranih štampača. Zatim se imena štampača dodaju u ComboBox kontrolu. Da bi se inicirao proces štampe potrebno je najpre instancirati PrintDocument objekat, iz koda ili prevlčenjem sa Toolboxa. Zatim se preko svojstva PrinterSetting pristupa odgovarajućoj PrinterSettings klasi i korišćenjem svojstva PrinterName se vrši odabir željenog štampača. Proces štampe kreće pozivom Print metode PrintDocument objekta.

  

Inicijalizacija procesa štampanja

public StreamReader sr;
public Font mojFont;  

private void printDocument1_BeginPrint(object sender, PrintEventArgs e)
{
    sr = new StreamReader(@"C:Temp aspored.txt");
    mojFont = new Font("Calibri", 11);
    printDocument1.PrinterSettings.PrinterName = printersList.SelectedItem.ToString();
   
}

 

U BeginPrint događaju PrintDocument objekta kreira se objekat klase StreamReader koji će čitati fajl koga treba odštampati. Takođe se korišćenjem klase Font definiše font kojim će biti odštampan tekst koji se nalazi u fajlu na koga pokazuje StreamReader.

  

Primer realizacije PrintPage event hendlera

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
    Graphics g = e.Graphics;
    float linijaPoStrani = 0;
    float yPoz = 0;
    int broj = 0;
    float levaMargina = e.MarginBounds.Left;
    float gornjaMargina = e.MarginBounds.Top;
    string linija = null;
    linijaPoStrani = e.MarginBounds.Height / mojFont.GetHeight(g);
    while (broj < linijaPoStrani && ((linija = sr.ReadLine()) != null))
    {
        yPoz = gornjaMargina + (broj * mojFont.GetHeight(g));
        g.DrawString(linija, mojFont, Brushes.Black, levaMargina, yPoz);
        broj++;
    }
    if (linija != null)
        e.HasMorePages = true;
    else e.HasMorePages = false;
}
  

Unutar PrintPage event handlera se najpre kreira Graphics objekat. Uzimanjem leve i gornje margine definiše se gornji levi ugao odakle počinje štampanje teksta. Broj linija teksta po strani zavisi od visine strane i veličine fonta koji se koristi. Treba uzeti u obzir da se koordinatni početak nalazi u gornjem levom uglu ekrana i da se x osa proteže po horizontali na desno, a y osa po vertikali na dole. Čita se linija po linija teksta iz fajla i  štampa počev od kraja leve margine. Koordinata y se za svaku sledeću liniju teksta povećava za visinu fonta. Kada se ispiše jedna strana teksta proverava se da li ima još linija za štampu. Ukoliko ima postavlja se svojstvo HasMorePages objekta PrintPageEventArgs na vrednost true i funkcija se izvršava ponovo.

  

PrintPageEventArgs objekat

Svojstvo Graphics  ovog objekta vraća Graphics objekat. Svojstvo HasMorePages  treba setovati na true ako još strana treba štampati, podrazumevana vrednost je false. Svojstvo MarginBounds vraća pravougaonik koji predstavlja stranu unutar margina. Svojstvo PageSettings predstavlja skup setovanja za tekuću stranu.

  

Štampanje dokumenta

private void buttonStampaj_Click(object sender, EventArgs e)
{
    printDocument1.Print();
}
 

Štampanje dokumenta se vrši pozivom Print metode odgovarajućeg PrintDocument objekta.

Pregled dokumenta pre štampe

Kontrola PrintPriviewDialog se koristi za prikaz dokumenta pre nego što će se pristupiti njegovom štampanju. Kreira se instanca klase PrintPreview ili se prevuče odgovarajuća kontrola na formu. Setuje se property Document ovog objekta na odgovarajući PrintDocument objekat. Dijalog se prikazuje korišćenjem ShowDialog metode.

  

Upotreba PrintPreview dijaloga

 

private void button1_Click(object sender, EventArgs e)
{
    printPreviewDialog1.PrintPreviewControl.Zoom = 1;
    printPreviewDialog1.ShowDialog();
}
 

Na primeru je ilustravano povezivanje PrintPriview dijaloga sa odgovarajućim dokument objektom. Pozivom metode ShowDialog se unutar event handlera za klik na dugme prikazuje PrintPreview dijalog.
Podešavanje strane pre štampe

Korišćenjem PageSetupDialog komponente može se omogućiti korisniku da podesi osobine strane. Korisnik može podesiti granice i margine, da definiše hedere i futere i specificira orjentaciju strane. Potrebno je kontrolu PageSetupDialog povezati sa odgovarajućim PrintDocument objektom, tj. dokumentom koga treba odštampati.

Koristi se ShowDialog() metoda za prikaz dialoga za podešavanje strane. Specificira se podrazumevano setovanje za sve strane koristeći DefaultPageSettings svojsto objekta PrintDocument.

  

Primer podešavanja strane

 

private void button2_Click(object sender, EventArgs e)
{
    pageSetupDialog1.Document.DefaultPageSettings.Color = false;
    pageSetupDialog1.ShowDialog();
}
 
 

Na primeru je prikazano povezivanje PageSetup dijaloga sa odgovarajućim dokument objektom. Pomoću DefaultPageSettings svojstva dokument objekta podešava se da štampa bude u crno beloj tehnici, tj. svojstvo Color se postavlja na vrednost false.

  

Kontrola PrintDialog

private void buttonStampaj_Click(object sender, EventArgs e)
{
    if (printDialog1.ShowDialog() == DialogResult.OK)
    {
        printDocument1.Print();
    }
}
 
 

Koristi se za specifikaciju setovanja vezanih za štampač. Kreira se instanca klase PrintDialog ili se prevuče odgovarajuća kontrola na formu. Postavi se njeno svojstvo Document na odgovarajući objekat klase PrintDocument. Zatim se prikazuje PrintDialog na kome korisnik odabira štampač. Kada korisnik odabere štampač i klikne na OK dugme dijaloga započinje proces štampe dokumenta.

  

Izbor štampača korišćenjem PrintDialog kontrole

// Load procedura forme nije više potrebna
private void printDocument1_BeginPrint(object sender, PrintEventArgs e)
{
    sr = new StreamReader(@"C:Temp aspored.txt");
    mojFont = new Font("Calibri", 11);// //printDocument1.PrinterSettings.PrinterName = //printersList.SelectedItem.ToString();
}
 
 

 

Sada Load procedura koja je definisana pre, nije potrebna jer se izbor štampača vrši korišćenjem PrintDialog kontrole. Takođe u BeginPrint proceduri treba izbaciti odgovarajuće linije koda koje se odnose na izbor štampača. Na slici je prikazan izgled PrintDialog prozora za izbor štampača.

Dodaj komentar Sviđa mi se - (0) Ne sviđa mi se - (0)    

  • Štampanje iz windows aplikacije 1
  • Štampanje iz windows aplikacije 2
  • Štampanje iz windows aplikacije 3