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.
import
knižnica.*;import
static
knižnica.Tlač
.cm
;import
java.awt.print.PageFormat
;import
java.awt.print.Paper
;import
java.awt.print.PrinterException
;import
java.awt.print.PrinterJob
;import
javax.print.PrintService
;// Test tlače – trieda s vnútornou konkretizáciou abstraktnej triedy Tlač.
public
class
TestTlačeextends
GRobot
{// Písmo, ktoré použijeme na posledný vykresľovaný odsek ukážky tlače:
private
static
Písmo
písmo =new
Písmo
("Cambria"
,Písmo
.NORMÁLNE
,14
);// Konkretizácia triedy Tlač.
public
Tlač
tlač =new
Tlač
(this
,2
) {public
void
kresli
(int
strana,PageFormat
formát) {double
rozsahX = formát.getWidth
() /2
–1.5
*cm
;double
rozsahY = formát.getHeight
() /2
–1.5
*cm
;switch
(strana) {case
0
:// 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
;case
1
:// 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):
String
text ="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í).
private
PrintService
[] služby;// Uzavretie statickej metódy Tlač.kresliTextDo tak, aby komunikovala
// s aktuálnym robotom a tlačovým rozhraním:
private
int
kresliTextDo(String
text,int
šírka,int
výš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č
.BlokSlov
blokSlov = 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).
int
i = 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
();return
i; }// Konštruktor.
private
TestTlač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.
private
void
vypíšSlužby() {Svet
.vymažTexty
();PrintService
aktuálnaSlužba = tlač.úloha
().getPrintService
();int
i =0
;for
(PrintService
služba : služby) {if
(služba.equals
(aktuálnaSlužba))Svet
.farbaTextu
(zelená
);else
Svet
.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.
@
Overridepublic
void
klik
() {// Kliknutie na aktívne slovo (ktoré je v našom prípade index služby)
// aktivuje prislúchajúcu tlačovú službu.
String
aktívneSlovo =Svet
.myšVAktívnomSlove
();if
(null
!= aktívneSlovo) {int
i =Integer
.parseInt
(aktívneSlovo);try
{ tlač.úloha
().setPrintService
(služby[i]); vypíšSlužby(); }catch
(PrinterException
pe) {Svet
.farbaTextu
(červená
);Svet
.vypíšRiadok
(pe.getMessage
()); } }// Pravé tlačidlo na prázdnu plochu aktivuje tlač:
else
if
(ÚdajeUdalostí
.tlačidloMyši
(PRAVÉ
)) {if
(tlač.tlačDialógom
("Ukážka tlače"
)) {// Tlač bola vykonaná v poriadku.
// …
} } }// Hlavná metóda.
public
static
void
main(String
[] args) {Svet
.použiKonfiguráciu
("TestTlače.cfg"
);new
TestTlač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č.BlokSlov
Táto trieda slúži na uchovanie celého bloku textu rozbitého na nakreslenie.
|
class |
Tlač.Fragment
Táto trieda slúži na uchovanie fragmentu slova.
|
class |
Tlač.Parametre
TODO
|
class |
Tlač.RiadokSlov
Táto trieda slúži na uchovanie jedného riadka bloku textu
rozbitého
na nakreslenie.
|
class |
Tlač.Slovo
Tá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 |
cm
Konštanta, násobenie ktorou prepočíta centimetre na tlačové
body.
|
static double |
inch
Konštanta, násobenie ktorou prepočíta palce na tlačové body.
|
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. |
NO_SUCH_PAGE, PAGE_EXISTS
UNKNOWN_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ódu nastavenieStrany(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í Printable
g
– 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 kresli
page
– číslo strany – cyklicky sa mení podľa toho, aký rozsah
tlače bol zvolený; tento parameter je odovzdaný do metódy kresli
PAGE_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)PrinterException
Tlač(GRobot)
,
Tlač(GRobot, int)
,
kresli(int, PageFormat)
public final int getNumberOfPages()
Alias pre početStrán
. (Súčasť implementácie rozhrania Pageable
.)
getNumberOfPages
v rozhraní Pageable
public 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í Pageable
pageIndex
– 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í Pageable
pageIndex
– 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 ú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 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 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 chs
null
dajFarbu(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 chs
null
dajFarbu(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 chs
dajFarbu(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 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 blokSlov
x
– ľ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
false
tlač(String)
,
tlačDialógom()
,
tlačDialógom(String)
public boolean tlac()
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
false
tlač()
,
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 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 tlačDialógom
.