public abstract class Tlač extends Object implements Printable, Pageable
Trieda prepájajúca kresliace funkcie robota s rozhraniami tlačového výstupu. Prostredníctvom tejto triedy môžete nechať zvolený robot tlačiť, pričom (pripomeňme, že) v závislosti od aktuálnych možností (a inštalácie) operačného systému môže ísť aj o virtuálnu tlačiareň. Napríklad o zachytávač obsahu ukladajúci tlačené objekty do PDF dokumentu.
Trieda je abstraktná s jedinou abstraktnou metódou – kresli(strana, formát). V nej má programátor
 implementovať „nakreslenie“ – rendrovanie každej tlačenej strany (podľa
 prijatých parametrov). Je spúšťaná automaticky pre každú tlačenú stranu
 (pozri aj informácie pri metóde print, ktorá je implementáciou rozhrania Printable),
 pričom používateľ nemusí zvoliť tlač všetkých strán, preto musí byť každá
 strana rendrovaná samostatne a principiálne tak, aby výsledok nebol
 skreslený vynechaním tlačenia niektorých strán používateľom (čiže obsah
 každej strany musí byť stabilný bez ohľadu na to, či boli alebo neboli
 vykreslené ostatné strany). To musí mať programátor pri rendrovaní
 strán na pamäti.
Príklad:
Tento príklad ukazuje tlač dvoch stránok pomocou nástrojov programovacieho rámca.
importknižnica.*;importstaticknižnica.Tlač.cm;importjava.awt.print.PageFormat;importjava.awt.print.Paper;importjava.awt.print.PrinterException;importjava.awt.print.PrinterJob;importjavax.print.PrintService;// Test tlače – trieda s vnútornou konkretizáciou abstraktnej triedy Tlač.publicclassTestTlačeextendsGRobot{// Písmo, ktoré použijeme na posledný vykresľovaný odsek ukážky tlače:privatestaticPísmopísmo =newPísmo("Cambria",Písmo.NORMÁLNE,14);// Konkretizácia triedy Tlač.publicTlačtlač =newTlač(this,2) {publicvoidkresli(intstrana,PageFormatformát) {doublerozsahX = formát.getWidth() /2–1.5*cm;doublerozsahY = formát.getHeight() /2–1.5*cm;switch(strana) {case0:// Na prvej strane budú jednoduché tvary rozmiestnené// v strede a rohoch.pomer(2);// (úprava pomeru strán obdĺžnika a elipsy)krúžok();// (krúžok v strede)skočNa(rozsahX, rozsahY);štvorec();// (štvorec vpravo hore)skočNa(-rozsahX, rozsahY);hviezda();// (hviezda vľavo hore)skočNa(rozsahX, -rozsahY);obdĺžnik();// (obdĺžnik vpravo dole)skočNa(-rozsahX, -rozsahY);elipsa();// (elipsa vľavo dole)break;case1:// Druhá strana bude obsahovať texty rendrované dvomi spôsobmi.// Textová informácia v tretine hornej časti papiera// (počítanej od stredu smerom nahor):skočNa(0, -rozsahY /3);text("Ukážka tlače… Písmo:");odskoč(0.75*cm);text(písmo().getFamily() +", "+písmo.getSize() +" pt");// Zmeníme písmo, vypíšeme jeho vlastnosti do tretiny spodnej// časti papiera (opäť počítanej od stredu, ale teraz nadol)…písmo(písmo);skočNa(0, rozsahY /3);text("^^ "+písmo().getFamily() +", "+písmo.getSize() +" pt ^^");// …a vykreslíme nasledujúci odsek do rámca (rámčeka) so// želanými rozmermi (určenými nižšie; poznámka: text je// upravený voľný preklad malej časti pôvodného zmysluplného// latinského textu, z ktorého vychádza novodobý nezmyselný// text Lorem Ipsum):Stringtext ="Musím vysvetliť, ako sa celá táto mylná idea "+"o odsúdení potešenia a chvále bolesti zrodila. Nikto "+"neodmieta, nemá rád, ani sa nevyhýba potešeniu, "+"pretože je príjemné, ale tí, ktorí nevedia, ako sa "+"ním dostatočne nasýtiť, narážajú na mimoriadne "+"bolestivé následky. Tiež nikto nemiluje, nevyhľadáva, "+"ani si neželá dobrovoľne zažiť utrpenie, pretože to "+"znamená bolesť, ale niekedy môže prekonanie bolesti "+"a utrpenia priniesť veľké potešenie. Vezmime si "+"triviálny príklad. Kto sa venuje namáhavému fyzickému "+"cvičeniu, získa nielen uznanie. Nikto však nemá právo "+"hľadať chybu v človeku, ktorý si užíva potešenie, "+"ktoré nemá nepríjemné následky.";intšírka = (int)rozsahX, výška = (int)(3.5*cm);// (Niekoľko poznámok: Pred kreslením/výstupom textu nakreslíme// obdĺžnik, do ktorého bude text kreslený. Meno kresliTextDo// musíme „nasmerovať“ na inštanciu robota/testu tlače, lebo// predvolene by smerovala do inštancie tlače/triedy Tlač – na// jej statickú metódu kresliTextDo. Výška a šírka sú vo vnútri// metódy TestTlače.this.kresliTextDo vynásobené dvomi, lebo// metóda Tlač.kresliTextDo prijíma celkové rozmery rámca, nie// polomery vpísanej elipsy ako mnohé metódy robota.)skočNa(0,2* rozsahY /3);obdĺžnik(šírka, výška); TestTlače.this.kresliTextDo(text, šírka, výška);break; } } };// Zoznam služieb (virtuálnych, sieťových, lokálnych, prípadne iných// tlačiarní).privatePrintService[] služby;// Uzavretie statickej metódy Tlač.kresliTextDo tak, aby komunikovala// s aktuálnym robotom a tlačovým rozhraním:privateintkresliTextDo(Stringtext,intšírka,intvýška) {// Ak chceme použiť robot na externé kreslenie, tak je dôležité// použiť dvojicu metód začniKreslenie a skončiKreslenie:začniKreslenie();// Blok textu rozbijeme na slová vopred, aby sme mohli upraviť// jeho vlastnosti (v tomto prípade len jemné zriedenie riadkovania):Tlač.BlokSlovblokSlov = tlač.rozbiNaSlová(grafika(), text,2* šírka); blokSlov.riadkovanie=1.15;// Použitie statickej metódy Tlač.kresliTextDo:// • prijíma vopred pripravený blokSlov s ktorým má pracovať,// preto je dôležité, aby bol druhý parameter null,// • objekt grafiky je rovnaký, aký má momentálne nastavený robot// (čo je v prípade tlače kontext nasmerovaný priamo na tlač),// • obdĺžnik, do ktorého sa má text zmestiť je prepočítaný podľa// polohy robota a požadovaných rozmerov (zadaných do parametrov// šírka a výška tejto metódy),// • kreslenie textov presahujúcich spodný okraj obdĺžnika je// zamedzené hodotnou true predposledného parametra (nekresliMimo)// • a začína sa prvým riadkom (index 0 v posledom parametri).inti = tlač.kresliTextDo(grafika(),null, (int)Svet.prepočítajX(polohaX() – šírka), (int)Svet.prepočítajY(polohaY() + výška),2* šírka,2* výška, blokSlov,true,0);// (Ukončenie kreslenia robotom – začaté vyššie volaním začniKreslenie.)skončiKreslenie();returni; }// Konštruktor.privateTestTlače() {veľkosť(0.5* cm); služby =PrinterJob.lookupPrintServices(); vypíšSlužby(); }// Výpis interaktívneho zoznamu aktuálne dostupných služieb. Kliknutie// na písmeno textu služby (tak fungujú aktívne slová vnútornej konzoly;// kliknutie ma medzeru je ignorované…) službu aktivuje.privatevoidvypíšSlužby() {Svet.vymažTexty();PrintServiceaktuálnaSlužba = tlač.úloha().getPrintService();inti =0;for(PrintServiceslužba : služby) {if(služba.equals(aktuálnaSlužba))Svet.farbaTextu(zelená);elseSvet.farbaTextu(modrá);// Do aktívneho slova „zakódujeme“ index služby:Svet.vypíšAktívneSlovo(i +"", služba.getName());Svet.vypíšRiadok(); ++i; } }// Obsluha kliknutia.@Overridepublicvoidklik() {// Kliknutie na aktívne slovo (ktoré je v našom prípade index služby)// aktivuje prislúchajúcu tlačovú službu.StringaktívneSlovo =Svet.myšVAktívnomSlove();if(null!= aktívneSlovo) {inti =Integer.parseInt(aktívneSlovo);try{ tlač.úloha().setPrintService(služby[i]); vypíšSlužby(); }catch(PrinterExceptionpe) {Svet.farbaTextu(červená);Svet.vypíšRiadok(pe.getMessage()); } }// Pravé tlačidlo na prázdnu plochu aktivuje tlač:elseif(ÚdajeUdalostí.tlačidloMyši(PRAVÉ)) {if(tlač.tlačDialógom("Ukážka tlače")) {// Tlač bola vykonaná v poriadku.// …} } }// Hlavná metóda.publicstaticvoidmain(String[] args) {Svet.použiKonfiguráciu("TestTlače.cfg");newTestTlače(); } }
Výsledok:
Okno miniaplikácie môže po spustení vyzerať napríklad takto:

 
Ukážka
 okna s výpisom dostupných tlačových služieb.
Takto by mali vyzerať stránky vytlačeného dokumentu (rozdiel môže byť v predvolenom fonte, ktorým sú písané prvé texty „Ukážka tlače… atď.“):

 
Výsledok tlače (ukážka vo vyššom rozlíšení).
| Modifikátor a typ | Trieda a opis | 
|---|---|
| class  | Tlač.BlokSlovTáto trieda slúži na uchovanie celého bloku textu rozbitého na nakreslenie. | 
| class  | Tlač.FragmentTáto trieda slúži na uchovanie fragmentu slova. | 
| class  | Tlač.ParametreTODO | 
| class  | Tlač.RiadokSlovTáto trieda slúži na uchovanie jedného riadka bloku textu
 rozbitého
 na nakreslenie. | 
| class  | Tlač.SlovoTáto trieda slúži na uchovávanie slov bloku textu, ktorý bol
 rozbitý
 na nakreslenie. | 
| Modifikátor a typ | Atribút a opis | 
|---|---|
| static double | cmKonštanta, násobenie ktorou prepočíta centimetre na tlačové
 body. | 
| static double | inchKonštanta, násobenie ktorou prepočíta palce na tlačové body. | 
| boolean | SNRAk je hodnota tohto atribútu rovná  true(predvolene),
 tak sa pri rozbíjaní textu na slová v prípade výskytu klasického spojovníka
 na konci aktuálneho riadka automaticky pridá nový pevný spojovník
 na začiatok nového riadka. | 
NO_SUCH_PAGE, PAGE_EXISTSUNKNOWN_NUMBER_OF_PAGES| Konštruktor a opis | 
|---|
| Tlač(GRobot robot)Konštruktor vytvárajúci inštanciu tlače, ktorá bude používať
 zadaný robot na kreslenie (rendrovanie) tlačených stránok a ktorá
 obsahuje predvolene jednu stranu. | 
| Tlač(GRobot robot,
    int početStrán)Konštruktor vytvárajúci inštanciu tlače, ktorá bude používať
 zadaný robot na kreslenie (rendrovanie) tlačených stránok a ktorá
 obsahuje zadaný počet strán. | 
| Modifikátor a typ | Metóda a opis | 
|---|---|
| abstract Color | dajFarbu(Graphics2D g2d,
        CharSequence chs,
        int poloha)Metóda určená na prekrytie. | 
| abstract Font | dajFont(Graphics2D g2d,
       CharSequence chs,
       int poloha)Metóda určená na prekrytie. | 
| abstract int | dajPosun(Graphics2D g2d,
        CharSequence chs,
        int poloha)Metóda určená na prekrytie. | 
| int | getNumberOfPages() Alias pre početStrán. | 
| PageFormat | getPageFormat(int pageIndex)Súčasť implementácie rozhrania  Pageable. | 
| Printable | getPrintable(int pageIndex)Súčasť implementácie rozhrania  Pageable. | 
| abstract void | kresli(int strana,
      PageFormat formát)Metóda určená na prekrytie. | 
| int | kresliTextDo(Graphics g,
            CharSequence chs,
            int x,
            int y,
            int šírka,
            int výška,
            Tlač.BlokSlov blokSlov,
            boolean nekresliMimo,
            int začniRiadkom)Rendruje text na grafický kontext do priestoru zadaného rámčeka. | 
| PageFormat | nastavenieStrany()Vráti inštanciu predvolených nastavení strany ( PageFormat), ktorá je (predvolene) používaná na tie strany, ktoré to
 nemajú určené inak: pozri prekryteľnú metódunastavenieStrany(strana). | 
| PageFormat | nastavenieStrany(int strana)Táto metóda je určená na prekrytie. | 
| void | nastavenieStrany(PageFormat nastavenieStrany)Zamení inštanciu  PageFormat, ktorá je používaná
 na predvolené nastavenia strany. | 
| Obrazok | obrazok() Alias pre obrázok. | 
| Obrazok | obrázok()Vráti referenčný obrázok, ktorého obsah vzniká ako vedľajší
 produkt kreslenia robotom počas rendrovania stránok tlače alebo
  null, ak ešte tlač nebola spustená. | 
| double[] | okraje()Zistí okraje predvolenej strany. | 
| void | okraje(double ľavý,
      double horný,
      double pravý,
      double spodný)Zmení okraje predvolenej strany. | 
| int | pocetStran() Alias pre početStrán. | 
| void | pocetStran(int početStrán) Alias pre početStrán. | 
| int | početStrán()Vráti aktuálny počet strán tejto inštancie tlače. | 
| void | početStrán(int početStrán)Nastaví nový počet strán tejto inštancie tlače. | 
| int | print(Graphics g,
     PageFormat pf,
     int page)Implementácia rozhrania  Printable. | 
| Tlač.BlokSlov | rozbiNaSlova(Graphics g,
            CharSequence chs,
            int šírkaRiadka) Alias pre rozbiNaSlová. | 
| Tlač.BlokSlov | rozbiNaSlová(Graphics g,
            CharSequence chs,
            int šírkaRiadka)Rozbije zadaný text do bloku textu podľa metriky aktuálneho
 fontu zadaného grafického kontextu. | 
| boolean | tlac() Alias pre tlač. | 
| boolean | tlac(String názovDokumentu) Alias pre tlač. | 
| boolean | tlacDialogom() Alias pre tlačDialógom. | 
| boolean | tlacDialogom(String názovDokumentu) Alias pre tlačDialógom. | 
| boolean | tlač()Pokúsi sa spustiť proces tlače (dokumentu). | 
| boolean | tlač(String názovDokumentu)Pokúsi sa spustiť proces tlače dokumentu (tejto inštancie),
 pričom dokumentu nastaví zadaný názov. | 
| boolean | tlačDialógom()Pokúsi sa spustiť proces tlače dokumentu s vyvolaním systémového
 tlačového dialógu pred samotným procesom tlače. | 
| boolean | tlačDialógom(String názovDokumentu)Pokúsi sa spustiť proces tlače dokumentu (tejto inštancie)
 s vyvolaním systémového tlačového dialógu pred samotným procesom
 tlače, pričom dokumentu nastaví zadaný názov. | 
| PrinterJob | uloha() Alias pre úloha. | 
| PrinterJob | úloha()Vráti aktuálnu tlačovú úlohu ( PrinterJob) tejto
 inštancie tlače. | 
public static final double inch
Konštanta, násobenie ktorou prepočíta palce na tlačové body.
Príklad: Výsledkom 1.0 * Tlač.inch bude posun v bodoch ekvivalentný
 jednému palcu.
Poznámka: Prirodzene, delenie touto konštantou prepočíta body na palce.)
public static final double cm
Konštanta, násobenie ktorou prepočíta centimetre na tlačové body.
Príklad: Výsledkom 1.0 * Tlač.cm bude posun v bodoch ekvivalentný
 jednému centimetru.
Poznámka: Prirodzene, delenie touto konštantou prepočíta body na centimetre.
public boolean SNR
Ak je hodnota tohto atribútu rovná true (predvolene),
 tak sa pri rozbíjaní textu na slová v prípade výskytu klasického spojovníka
 na konci aktuálneho riadka automaticky pridá nový pevný spojovník
 na začiatok nového riadka.
public Tlač(GRobot robot)
Konštruktor vytvárajúci inštanciu tlače, ktorá bude používať zadaný robot na kreslenie (rendrovanie) tlačených stránok a ktorá obsahuje predvolene jednu stranu.
Robot je s touto inštanciou tlače spárovaný a vždy pred rendrovaním strany automaticky nastavený podľa kontextu.
robot – kresliaci robot používaný na rendrovanie obsahu stránTlač(GRobot, int), 
kresli(int, PageFormat), 
print(Graphics, PageFormat, int)public Tlač(GRobot robot, int početStrán)
Konštruktor vytvárajúci inštanciu tlače, ktorá bude používať zadaný robot na kreslenie (rendrovanie) tlačených stránok a ktorá obsahuje zadaný počet strán.
Robot je s touto inštanciou tlače spárovaný a vždy pred rendrovaním strany automaticky nastavený podľa kontextu.
robot – kresliaci robot používaný na rendrovanie obsahu stránpočetStrán – počet strán dokumentuTlač(GRobot), 
kresli(int, PageFormat), 
print(Graphics, PageFormat, int)public final int print(Graphics g, PageFormat pf, int page) throws PrinterException
Implementácia rozhrania Printable. V tejto metóde
 sú prepojené všetky vlastnosti tejto triedy: metóda je automaticky
 cyklicky spúšťaná po úspešnom zahájení tlače,
 kedy na základe špecifikovaného počtu strán
 zaháji „kreslenie“ (rendrovanie)
 každej strany – pričom musí byť použitý ten kresliaci robot, ktorý bol
 zadaný do konštruktora tejto inštancie (inak
 by tlač nefungovala).
Upozornenie: Na rendrovanie strán
 musí byť využitý presne ten robot, ktorý bol zadaný do
 konštruktora tejto inštancie tlače.
 Pokus o využitie iného robota zlyhá, pretože pri tlači je dôležité,
 aby mal grafický robot nasmerované kreslenie do správneho grafického
 kontextu (Graphics), čo sa deje automaticky na
 pozadí pre robota, ktorý je spárovaný s touto tlačou. 
Poznámka: Používateľ nemusí pri zahájení tlače zvoliť vytlačenie všetkých strán, preto musí byť zaručené, aby každá strana mohla byť vyrendrovaná samostatne – bez ohľadu na to, či bol obsah ostatných strán vykreslený, alebo nie. Toto musí mať programátor pri rendrovaní strán na pamäti. Ideálne je už pri plánovaní implementácie tlače navrhnúť rendrovanie strán tak, aby mohla byť každá strana v ľubovoľnom čase vyrendrovaná izolovane od ostatných strán.
Táto metóda je finálna (neprekryteľná), lebo jej neúmyselným prekrytím by sa narušil celý princíp tlače tohto rámca. Využíva vnútorné mechanizmy programovacieho rámca na korektné nastavenie všetkých objektov.
print v rozhraní Printableg – grafický kontext na tlač (je generovaný automaticky systémom
     tlače Javy)pf – formát strany (tiež je priraďovaný automaticky podľa iných
     nastavení – pozri napríklad metódu nastavenieStrany(strana)); tento parameter je odovzdaný do
     metódy kreslipage – číslo strany – cyklicky sa mení podľa toho, aký rozsah
     tlače bol zvolený; tento parameter je odovzdaný do metódy kresliPAGE_EXISTS, alebo NO_SUCH_PAGE – podľa toho, či systém tlače
     požadoval rendrovanie jestvujúcej strany (programátor používajúci
     programovací rámec sa týmto princípom nemusí zaoberať, pretože
     metóda kresli je automaticky
     spúšťaná len pre tie strany, ktoré majú byť vytlačené a ktoré majú
     jestvovať – v súlade s aktuálnym počtom
     strán)PrinterExceptionTlač(GRobot), 
Tlač(GRobot, int), 
kresli(int, PageFormat)public final int getNumberOfPages()
 Alias pre
 Alias pre početStrán. (Súčasť implementácie rozhrania Pageable.)
getNumberOfPages v rozhraní Pageablepublic PageFormat getPageFormat(int pageIndex)
Súčasť implementácie rozhrania Pageable. Vráti
 nastavenie (formát) požadovanej strany. Ak strana nejestvuje, tak je
 vrátené predvolené nastavenie strany (čiže táto implementácia
 negeneruje výnimky).
Poznámka: S nastaveniami strany je to komplikovanejšie. Slovo v tomto procese má tlačová služba, ktorá preferuje také nastavenie strany, ktoré je kompatibilné s tlačiarňou, čiže ak tlačiareň (môže byť aj virtuálna) tlačí len strany formátu A4, vždy bude výsledkom tlače tento formát. Nastavenia strany, ktoré sa pokúsite zmeniť budú prispôsobené tomuto formátu.
getPageFormat v rozhraní PageablepageIndex – index strany, ktorej nastavenie (formát) má byť
     vrátené (je generovaný automaticky v rozsahu tlačených strán)public Printable getPrintable(int pageIndex)
Súčasť implementácie rozhrania Pageable. Táto
 implementácia vracia pre všetky strany (vrátane neexistujúcich) túto
 (aktuálnu) inštanciu triedy Tlač (čiže samú seba).
getPrintable v rozhraní PageablepageIndex – index strany (je ignorovaný)public PrinterJob úloha()
Vráti aktuálnu tlačovú úlohu (PrinterJob) tejto
 inštancie tlače. Úloha môže byť použitá na konfiguráciu a rôzne
 aktivity pripravujúce tlač.
PrinterJob) tejto
     inštanciepublic PrinterJob uloha()
 Alias pre
 Alias pre úloha.
public int početStrán()
Vráti aktuálny počet strán tejto inštancie tlače.
početStrán(), 
kresli(int, PageFormat)public int pocetStran()
 Alias pre
 Alias pre početStrán.
public void početStrán(int početStrán)
Nastaví nový počet strán tejto inštancie tlače. Zadaná hodnota môže byť ľubovoľné celé číslo – záporné hodnoty majú rovnaký význam ako nula.
Poznámka: Je teoreticky možné využiť záporné hodnoty na uchovanie rôznych chybových stavov, ale treba vopred dostatočne dobre zvážiť, či by to neprinieslo komplikácie alebo rôzne nepredvídateľné dôsledky. Rozhodnutie ponechávame na autorov softvéru vytváraného pomocou tohto rámca.
početStrán – nový počet strán tejto inštancie tlačepočetStrán(int), 
kresli(int, PageFormat)public void pocetStran(int početStrán)
 Alias pre
 Alias pre početStrán.
public double[] okraje()
Zistí okraje predvolenej strany. Údaje sú vrátené v tlačových
 bodoch a na prepočet jednotiek sa dá použiť delenie konštantami:
 inch alebo cm. (Pozri aj informácie uvedené
 pri párujúcej metóde: okraje.)
okraje(double, double, double, double), 
nastavenieStrany(), 
nastavenieStrany(PageFormat), 
nastavenieStrany(int)public void okraje(double ľavý,
                   double horný,
                   double pravý,
                   double spodný)
Zmení okraje predvolenej strany. Údaje sú zadávané v tlačových
 bodoch. Na zmenu jednotiek použite násobenie konštantou inch alebo cm. Priestor za hranicami okrajov nebude
 zahrnutý do tlačového výstupu.
ľavý – ľavý   okraj strany (v tlačových bodoch)horný – horný  okraj strany (v tlačových bodoch)pravý – pravý  okraj strany (v tlačových bodoch)spodný – spodný okraj strany (v tlačových bodoch)okraje(), 
nastavenieStrany(), 
nastavenieStrany(PageFormat), 
nastavenieStrany(int)public PageFormat nastavenieStrany()
Vráti inštanciu predvolených nastavení strany (PageFormat), ktorá je (predvolene) používaná na tie strany, ktoré to
 nemajú určené inak: pozri prekryteľnú metódu nastavenieStrany(strana).
Poznámka: S nastaveniami strany je to komplikovanejšie. Slovo v tomto procese má tlačová služba, ktorá preferuje také nastavenie strany, ktoré je kompatibilné s tlačiarňou, čiže ak tlačiareň (môže byť aj virtuálna) tlačí len strany formátu A4, vždy bude výsledkom tlače tento formát. Nastavenia strany, ktoré sa pokúsite zmeniť budú prispôsobené tomuto formátu.
PageFormat)nastavenieStrany(PageFormat), 
nastavenieStrany(int), 
okraje(), 
okraje(double, double, double, double)public void nastavenieStrany(PageFormat nastavenieStrany)
Zamení inštanciu PageFormat, ktorá je používaná
 na predvolené nastavenia strany.
Poznámka: S nastaveniami strany je to komplikovanejšie. Slovo v tomto procese má tlačová služba, ktorá preferuje také nastavenie strany, ktoré je kompatibilné s tlačiarňou, čiže ak tlačiareň (môže byť aj virtuálna) tlačí len strany formátu A4, vždy bude výsledkom tlače tento formát. Nastavenia strany, ktoré sa pokúsite zmeniť budú prispôsobené tomuto formátu.
nastavenieStrany – nové predvolené nastavenie strany (PageFormat)nastavenieStrany(), 
nastavenieStrany(int), 
okraje(), 
okraje(double, double, double, double)public PageFormat nastavenieStrany(int strana)
Táto metóda je určená na prekrytie. Jej predvolená verzia vracia
 hodnotu null pre všetky strany.
Prekrytá verzia tejto metódy môže obsahovať úpravu nastavenia
 každej (individuálnej) strany (rozlišovanej podľa parametra strana. Upravené nastavenie musí byť vrátené ako inštancia triedy
 PageFormat.
 
 Ak metóda nechce zmeniť nastavenie pre určitú stranu, tak musí
 vrátiť hodnotu null (v tom prípade sa použije predvolené
 nastavenie strany). Predvolené nastavenie strany sa dá získať
 volaním metódy nastavenieStrany (bez
 parametra).
Poznámka: S nastaveniami strany je to komplikovanejšie. Slovo v tomto procese má tlačová služba, ktorá preferuje také nastavenie strany, ktoré je kompatibilné s tlačiarňou, čiže ak tlačiareň (môže byť aj virtuálna) tlačí len strany formátu A4, vždy bude výsledkom tlače tento formát. Nastavenia strany, ktoré sa pokúsite zmeniť budú prispôsobené tomuto formátu.
strana – poradové číslo kreslenej (tlačenej) stranynull.nastavenieStrany(), 
nastavenieStrany(PageFormat), 
okraje(), 
okraje(double, double, double, double), 
kresli(int, PageFormat)public Obrazok obrázok()
Vráti referenčný obrázok, ktorého obsah vzniká ako vedľajší
 produkt kreslenia robotom počas rendrovania stránok tlače alebo
 null, ak ešte tlač nebola spustená. Obrázok je pomocný
 objekt tlače, ktorý má zabrániť vzniku chýb v dôsledku chýbajúceho
 rastra, ale pri procese tlače nie je priamo využívaný. Obsah obrázka
 sa môže líšiť od reálneho obsahu tlačených stránok, ale za
 štandardných okolností by mal obsahovať rastrový obraz naposledy
 vytlačenej strany, pretože obsah tohto obrázka je pred tlačou novej
 strany vždy vymazaný (a ak je na tlač využívaný len konkrétny robot,
 tak by sa všetko malo premietať do tohto obrázka). Táto inštancia
 obrázka nemá byť použitá na kreslenie (nemalo by to zmysel). Je
 vhodná napríklad na zistenie rozmerov aktuálne tlačenej strany
 (pričom jeden pixel je zhruba jeden tlačový bod) počas jej
 kreslenia, prípadne
 (v prípade vhodných okolností) na získanie rastrového obrazu naposledy
 vytlačenej strany (na informatívne účely).
Táto metóda môže po vykonaní rôznych tlačových úloh vrátiť odlišný
 objekt. Vráti vždy objekt obrázka použitý pri poslednej tlačenej
 strane, pričom rozmery tohto obrázka sú určené podľa nastavení tejto
 strany PageFormat). Všetky vytvorené inštancie
 obrázkov sú vnútorne ukladané a recyklované podľa potreby (pri stranách
 s rovnakými rozmermi je použitá tá istá inštancia).
public abstract void kresli(int strana,
                            PageFormat formát)
Metóda určená na prekrytie. V jej tele má byť zabezpečené „nakreslenie“ – vyrendrovanie strany so zadaným číslom. Číslo je v rozmedzí od 0 po (nie vrátane) počet strán. Na kreslenie bude využitý robot zadaný do konštruktora tejto inštancie.
Upozornenie: Na rendrovanie strán
 musí byť využitý presne ten robot, ktorý bol zadaný do
 konštruktora tejto inštancie tlače.
 Pokus o využitie iného robota zlyhá, pretože pri tlači je dôležité,
 aby mal grafický robot nasmerované kreslenie do správneho grafického
 kontextu (Graphics), čo sa deje automaticky na
 pozadí pre robota, ktorý je spárovaný s touto tlačou. 
Poznámka: Používateľ nemusí pri zahájení tlače zvoliť vytlačenie všetkých strán, preto musí byť zaručené, aby každá strana mohla byť vyrendrovaná samostatne – bez ohľadu na to, či bol obsah ostatných strán vykreslený, alebo nie. Toto musí mať programátor pri rendrovaní strán na pamäti. Ideálne je už pri plánovaní implementácie tlače navrhnúť rendrovanie strán tak, aby mohla byť každá strana v ľubovoľnom čase vyrendrovaná izolovane od ostatných strán.
strana – poradové číslo kreslenej (tlačenej) stranyformát – nastavenie kreslenej (tlačenej) stranypočetStrán(), 
početStrán(int), 
nastavenieStrany(int), 
Tlač(GRobot), 
Tlač(GRobot, int), 
print(Graphics, PageFormat, int)public abstract Color dajFarbu(Graphics2D g2d, CharSequence chs, int poloha)
Metóda určená na prekrytie. Táto metóda je volaná metódou rozbiNaSlová v prípade
 výskytu špeciálneho riadiaceho znaku (ASCII 1), ktorý má v tomto
 prípade význam „zmeň atribúty.“ Prijíma takmer rovnaké parametre ako
 metóda rozbiNaSlová
 s výnimkou posledného, ktorý v prípade tejto metódy značí aktuálnu
 polohu spracovania sekvencie znakov. Návratovou hodnotou tejto metódy
 je buď nová farba textu, alebo hodnota null, ktorá znamená,
 že farba textu nebude zmenená. V sekvencii sú za sebou volané tieto
 tri metódy:
Ich účel je obdobný, len v prípade poslednej nahrádza význam
 hodnoty null číselná hodnota 0.
g – grafický kontextchs – reťazec na rozbitiepoloha – aktuálna poloha spracovania reťazca chsnulldajFarbu(Graphics2D g2d, CharSequence chs, int poloha), 
dajFont(Graphics2D g2d, CharSequence chs, int poloha), 
dajPosun(Graphics2D g2d, CharSequence chs, int poloha)public abstract Font dajFont(Graphics2D g2d, CharSequence chs, int poloha)
Metóda určená na prekrytie. Táto metóda je volaná metódou rozbiNaSlová v prípade
 výskytu špeciálneho riadiaceho znaku (ASCII 1), ktorý má v tomto
 prípade význam „zmeň atribúty.“ Prijíma takmer rovnaké parametre ako
 metóda rozbiNaSlová
 s výnimkou posledného, ktorý v prípade tejto metódy značí aktuálnu
 polohu spracovania sekvencie znakov. Návratovou hodnotou tejto metódy
 je buď nový font platný pre ďalší text, alebo hodnota null,
 ktorá znamená, že font sa nemení. V sekvencii sú za sebou volané tieto
 tri metódy:
Ich účel je obdobný, len v prípade poslednej nahrádza význam
 hodnoty null číselná hodnota 0.
g – grafický kontextchs – reťazec na rozbitiepoloha – aktuálna poloha spracovania reťazca chsnulldajFarbu(Graphics2D g2d, CharSequence chs, int poloha), 
dajFont(Graphics2D g2d, CharSequence chs, int poloha), 
dajPosun(Graphics2D g2d, CharSequence chs, int poloha)public abstract int dajPosun(Graphics2D g2d, CharSequence chs, int poloha)
Metóda určená na prekrytie. Táto metóda je volaná metódou rozbiNaSlová v prípade
 výskytu špeciálneho riadiaceho znaku (ASCII 1), ktorý má v tomto
 prípade význam „zmeň atribúty.“ Prijíma takmer rovnaké parametre ako
 metóda rozbiNaSlová
 s výnimkou posledného, ktorý v prípade tejto metódy značí aktuálnu
 polohu spracovania sekvencie znakov. Návratovou hodnotou tejto metódy
 je zmena vertikálnej polohy text na riadku. Logicky, 0
 znamená, že poloha textu sa nemení. V sekvencii sú za sebou volané
 tieto tri metódy:
g – grafický kontextchs – reťazec na rozbitiepoloha – aktuálna poloha spracovania reťazca chsdajFarbu(Graphics2D g2d, CharSequence chs, int poloha), 
dajFont(Graphics2D g2d, CharSequence chs, int poloha), 
dajPosun(Graphics2D g2d, CharSequence chs, int poloha)public Tlač.BlokSlov rozbiNaSlová(Graphics g, CharSequence chs, int šírkaRiadka)
Rozbije zadaný text do bloku textu podľa metriky aktuálneho
 fontu zadaného grafického kontextu.
 Text je rozbíjaný podľa maximálnej šírky (pravého okraja), ktorú môže
 dosiahnuť na riadku. Vrátený blok môže byť prispôsobený (napríklad
 mu môže byť upravené riadkovanie) a je pripravený na rendrovanie
 pomocou metódy kresliTextDo (spúšťanej
 s rovnakým grafickým kontextom a rovnakým nastavením fontu, inak bude
 výsledok nepredvídateľný).
Táto metóda môže byť spúšťaná automaticky metódou kresliTextDo – pozri informácie v jej opise.
g – grafický kontextchs – reťazec na rozbitiešírka – maximálna šírka textu na riadkupublic Tlač.BlokSlov rozbiNaSlova(Graphics g, CharSequence chs, int šírkaRiadka)
 Alias pre
 Alias pre rozbiNaSlová.
public int kresliTextDo(Graphics g, CharSequence chs, int x, int y, int šírka, int výška, Tlač.BlokSlov blokSlov, boolean nekresliMimo, int začniRiadkom)
Rendruje text na grafický kontext do priestoru zadaného rámčeka.
 Parametre rendrovania relatívne podrobne určujú parametre tejto
 metódy. Vhodnou kombináciou ich hodnôt a opakovaným volaním tejto
 metódy s hodnotami, ktoré sa vzájomne dopĺňajú sa dosiahnuť napríklad
 rendrovanie jedného vopred rozbitého bloku do viacerých rôznych rámčekov
 (napríklad pre text prekračujúci rozhranie strán). Užitočná je pri tom
 návratová hodnota tejto metódy, ktorá určuje index prvého riadka, ktorý
 presiahol požadovanú výšku bloku (zadanú v parametri výška),
 pričom návratová hodnota -1 znamená, že táto situácia
 nenastala.
g – grafický kontext kreslenia textu; jeho font ovplyvňuje rozbíjanie textu
     na slováchs – text, ktorý má byť automaticky rozbitý na slová
     podľa rozmerov rámčeka (parametre šírka a výška)
     alebo hodnota null – pozri aj parameter blokSlovx – ľavá súradnica rámčeka kreslenia bloku textuy – horná súradnica rámčeka kreslenia bloku textušírka – šírka rámčeka kreslenia bloku textuvýška – výška rámčeka kreslenia bloku textublokSlov – tento parameter (ak nie je null) buď
     obsahuje jestvujúce rozbitie slov, ktoré má byť použité na
     vykreslenie bloku textu – v tom prípade musí byť parameter
     chs rovný null ((Graphics, CharSequence, int) rozbitie musí byť vykonané s tou
     istou konfiguráciou grafického objektu Graphics,
     ktorá je zadaná do prvého parametra g – najlepšie s tou
     istou inštanciou, ktorej nebol medzitým zmenený font; inak môže
     byť výsledok nepredvídateľný), alebo sa do neho uloží rozbitie na slová
     aktuálneho parametra chs (na ďalšie použitie)nekresliMimo – príznak určujúci, že kreslenie textu sa má zastaviť
     po prekročení spodnej hranice rámčekazačniRiadkom – index riadka, ktorým sa má kreslenie bloku textu
     začať; toto je využiteľné pri blokoch, ktorých kreslenie má byť
     rozdelené do viacerých rámčekov s rozdielnou výškou (šírka musí
     byť rovnaká, inak bude výsledok nepredvídateľný)výška); hodnota -1 znamená,
     že táto situácia nenastalapublic boolean tlač()
Pokúsi sa spustiť proces tlače (dokumentu).
true, inak
     falsetlač(String), 
tlačDialógom(), 
tlačDialógom(String)public boolean tlac()
 Alias pre
 Alias pre tlač.
public boolean tlač(String názovDokumentu)
Pokúsi sa spustiť proces tlače dokumentu (tejto inštancie), pričom dokumentu nastaví zadaný názov.
názovDokumentu – názov tlačeného dokumentutrue, inak
     falsetlač(), 
tlačDialógom(), 
tlačDialógom(String)public boolean tlačDialógom()
Pokúsi sa spustiť proces tlače dokumentu s vyvolaním systémového tlačového dialógu pred samotným procesom tlače. Ak je dialóg používateľom zrušený, tlač nie je spustená.
true, inak
     false (pri zrušení dialógu alebo chybe spustenia tlače)tlač(), 
tlač(String), 
tlačDialógom(String)public boolean tlacDialogom()
 Alias pre
 Alias pre tlačDialógom.
public boolean tlačDialógom(String názovDokumentu)
Pokúsi sa spustiť proces tlače dokumentu (tejto inštancie) s vyvolaním systémového tlačového dialógu pred samotným procesom tlače, pričom dokumentu nastaví zadaný názov. Ak je dialóg používateľom zrušený, tlač nie je spustená.
názovDokumentu – názov tlačeného dokumentutrue, inak
     false (pri zrušení dialógu alebo chybe spustenia tlače)tlač(), 
tlač(String), 
tlačDialógom()public boolean tlacDialogom(String názovDokumentu)
 Alias pre
 Alias pre tlačDialógom.