Delphi - Nyomtatás állományba

forráskód letöltése
Ebből a cikkből megtudhatjuk, hogy hogyan lehet programból közvetlenül fájlba nyomtatni. Fény derül továbbá arra is, hogy az így létrejött állományt miként használhatjuk fel, vagyis miként nyomtathatjuk ki. Néha bizony előfordul, hogy a nyomtatni kívánt dokumentumot nem azonnal a nyomtatóra szeretnénk küldeni, hanem mondjuk egy fájlban eltárolni. A Windows nyomtató meghajtóinál lehetőség van a fájlba nyomtatás beállítására, de nem a legkényelmesebb mindig a nyomtató beállításait módosítani.

Ahhoz, hogy fájlba nyomtassunk, a programból meg kell változtatnunk a nyomtatási port-ot "FILE:"-ra. Nézzük, hogy hogyan is tehetjük ezt meg.

Első lépésben lefoglalunk memóriát az adatoknak, majd a TPrinter osztály segítségével lekérdezzük a nyomtató beállításait. Ezt a GetPrinter függvénnyel tehetjük meg, amely a paraméterként megadott változókban adja vissza nekünk a kívánt értékeket. Az első három paraméter PChar típusú, míg a negyedik egy THandle típusú változó.
        GetMem(pDevice, cchDeviceName);
        GetMem(pDriver, MAX_PATH);
        GetMem(pPort, MAX_PATH);

        Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
Ha megkaptuk az adatokat, akkor mindjárt vissza is adhatjuk őket úgy, hogy a harmadik paramétert (ami a nyomtatási port-ot határozza meg) megváltoztatjuk "FILE:"-ra. Ezzel elértük azt, hogy az alapértelmezett nyomtató ezentúl fájlba nyomtat.
        Printer.SetPrinter(pDevice, PDriver, 'FILE:', hDMode);
Mivel a nyomtató adataira már nincs szükség, ezért felszabadítjuk a lefoglalt memóriát:
        FreeMem(pDevice, cchDeviceName);
        FreeMem(pDriver, MAX_PATH);
        FreeMem(pPort, MAX_PATH);
Most már jöhet a nyomtatás. Ezt is a TPrinter osztály segítségével tesszük meg. A nyomtatást a BeginDoc eljárás meghívásával kezdjük. Ezzel jelezzük a nyomtatónak, hogy új dokumentumot készítünk. A TPrinter osztálynak van egy TCanvas objektuma, aminek segítségével tetszőleges grafikát rajzolhatunk. Mi most az egyszerűség kedvéért csak szöveget írunk rá. Felsoroljuk például a rendszer alá telepített nyomtatók neveit, és azt, hogy melyik port-hoz vannak rendelve. Ha elkészült a mű, akkor az EndDoc metódus meghívásával már küldhetjük is a nyomtatóra. Mivel a nyomtató port-nál "FILE:"-t adtunk meg, ezért egy dialógus ablakot kapunk, amelyben megadhatjuk a fájl nevét, .prn kiterjesztéssel. A létrejövő fájlt most már bármikor kiküldhetjük a nyomtatóra, pl. egy "copy test.prn lpt1:" DOS paranccsal.
        Printer.BeginDoc;
        Printer.Canvas.TextOut(100, 100, 'Animare Software 
           példaprogram © 2001 (http://www.animare.hu)');
        Printer.Canvas.TextOut(100, 130, 'Printer :'+Printer.Title);
        Printer.Canvas.TextOut(100, 160, 'Index: '+
            IntToStr(Printer.PrinterIndex));
        Printer.Canvas.TextOut(100, 200, 'Printers:');
        i:=0;
        while i<Printer.Printers.Count do
        begin
            Printer.Canvas.TextOut(100, 230+i*30, '   - '+    
                Printer.Printers[i]);
            inc(i);
        end;
        Printer.EndDoc;

        Printer.Free;
    end;
end;