HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Nyomtatás alapjai, avagy a PrintDocument komponens


Példaprogram letöltése

7760 bájt

Ha papíron kell megjelenítenünk tetszőleges adatokat, akkor ebben nagy segítséget nyújt a PrintDocument komponens. Mellékelt példában ezzel ismerkedhetünk meg.

Nyomtatáshoz tegyünk fel tehát egy PrintDocument komponenst. Feladatként azt valósítjuk meg, hogy kinyomtatjuk az autoexec.bat állomány tartalmát. Ha esetleg az ön rendszerében ez nincs jelen, akkor írja át a forráskódban ezt a hivatkozást egy másik, létező szöveges állományra.
Ahhoz, hogy nyomtatni tudjunk egy szöveges állományt, ahhoz ismernünk kell annak tartalmát. Ehhez egy StreamReader osztályt hívunk segítségül, mellyel beolvashatjuk az állományunk tartalmát. A nyomtatási munka elindításához a PrintDocument komponens Print függvényét kell meghívnunk.
      protected void button1_Click (object sender, System.EventArgs e)
      {
        try
        {
          st = new StreamReader("c:\\autoexec.bat");
          try
          {
            font = new Font("Courier New", 10);
            printDocument1.Print();
          }        
          finally
          {
            st.Close();
          }
        }
        catch (Exception ex)
        {
          MessageBox.Show(ex.Message);
        }
      }
Amikor e Print meghívásra kerül, akkor jön létre a komponens PrintPage eseménye. Ez lesz az a pont a programunkban, ahol megmondhatjuk, hogy mit is küldünk a nyomtató felé.
Az esemény paramétereként kapunk egy PrintPageEventArgs típusú változót. Ebben sok olyan adat áll a rendelkezésünkre, melyet felhasználhatunk a nyomtatási munka elvégzéséhez. Így például a MarginBounds property-ben megkapjuk papírlaphoz tartozó margót. A Graphics property-n keresztül pedig tetszőleges grafikai funkciót elérhetünk a dokumentumunk kirajzolásához.
A szöveges állomány nyomtatását úgy végezzük el, hogy egy while ciklussal végigmegyünk az állomány egyes sorain. Ez a ciklus addig fut, amíg van elegendő hely az adott lapon a következő sor kinyomtatásához, vagy amíg van mit kinyomtatni. A ciklusmagban számláljuk az aktuális sor pozícióját, ahová írnunk kell. A szöveg kirajzolását a Graphics osztály DrawString függvényével végezzük.
A ciklus végeztével szintén a PrintPageEventArgs típusú változón keresztül jelezhetjük a PrintDocument komponens felé, hogy van-e még nyomtatandó munka vagy már végeztünk. Ezt a HasMorePages logikai property-nek történő értékadással tehetjük meg. Amennyiben ennek igaz értéket adunk, úgy a PrintDocument komponens új lapot nyit és újra aktivizálja a PrintPage eseményét.
      protected void printDocument1_PrintPage (object sender, System.Drawing.Printing.PrintPageEventArgs e)
      {        
        ...
        float l = e.MarginBounds.Left;
        float t = e.MarginBounds.Top;        
        float h = font.GetHeight(e.Graphics);
        float max = e.MarginBounds.Height / h;
        while (count < max && ((line = st.ReadLine()) != null)) 
        {
          y = count * h + t;
          e.Graphics.DrawString(line, font, Brushes.Black, l, y, new StringFormat());
          count++;
        }
        e.HasMorePages = line != null;        
      }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2001 évkönyv 110. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |