Modeli upodabljanja
V Javi sta dva modela tiskanja: Za tiskanje
delovna mesta in Pageable
službe.
Natisni
Za tiskanje
opravila so enostavnejša od obeh modelov tiskanja. Ta model uporablja samo enega PagePainter
za celoten dokument. Strani se upodabljajo v zaporedju, začenši z nič stranjo. Ko se natisne zadnja stran, vaš PagePainter
mora vrniti NO_SUCH_PAGE
vrednost. Tiskovni podsistem bo vedno zahteval, da aplikacija upodablja strani v zaporedju. Če na primer vaša aplikacija zahteva upodabljanje strani od pete do sedme, bo tiskalni podsistem zahteval vse strani do sedme strani, natisnil pa bo samo strani pet, šest in sedem. Če vaša aplikacija prikaže pogovorno okno za tiskanje, skupno število strani za tiskanje ne bo prikazano, saj je nemogoče vnaprej vedeti, koliko strani v dokumentu uporabljate ta model.
Pageables
Pageable
delovna mesta ponujajo več prožnosti kot Za tiskanje
kot vsaka stran v a Pageable
opravilo lahko vsebuje drugačno postavitev. Pageable
delovna mesta se najpogosteje uporabljajo z Knjiga
s, zbirka strani, ki so lahko v različnih oblikah. Razložil bom Knjiga
razred v trenutku.
A Pageable
delovno mesto ima naslednje značilnosti:
- Vsaka stran ima lahko svojega slikarja. Na primer, za tiskanje naslovnice lahko uporabite slikarja, drugega za vsebino in tretjega za celoten dokument.
- Za vsako stran v knjigi lahko nastavite drugačno obliko strani. V
Pageable
lahko mešate pokončne in ležeče strani. - Tiskalni podsistem lahko od vaše aplikacije zahteva, da strani natisne zaporedno, nekatere strani pa bodo po potrebi preskočene. Še enkrat, glede tega vam ni treba skrbeti, če lahko na zahtevo navedete katero koli stran v dokumentu.
- The
Pageable
delo ni treba vedeti, koliko strani je v dokumentu.
Knjige
Novost je tudi od različice 1.2 Knjiga
razred. Ta razred vam omogoča ustvarjanje dokumentov na več straneh. Vsaka stran ima lahko svojo obliko in svojega slikarja, kar vam omogoča prilagodljivost pri ustvarjanju prefinjenih dokumentov. Ker je Knjiga
razred izvaja Pageable
vmesnik, lahko implementirate svojega Knjiga
razred, če je predviden Knjiga
razred nima funkcij, ki jih potrebujete.
A Knjiga
razred predstavlja zbirko strani. Ko je bil prvič ustvarjen, Knjiga
predmet je prazen. Če želite dodati strani, preprosto uporabite eno od obeh dodaj ()
metode (za več podrobnosti glejte mojo razlago tega razreda v razdelku API). Parametri te metode so PageFormat
objekt, ki opredeljuje fizične značilnosti strani, in a PagePainter
objekt, ki izvaja Za tiskanje
vmesnik. Če ne poznate števila strani v dokumentu, preprosto podajte UNKNOWN_NUMBER_OF_PAGES
vrednost za dodaj ()
metoda. Tiskalniški sistem samodejno poišče število strani, tako da pokliče vse slikarje strani v knjigi, dokler ne prejme NO_SUCH_PAGE
vrednost.
Definicija API
Teorija in praksa se bodo srečali v tem poglavju. V prejšnjih odsekih smo spoznali strukturo strani, merske enote in modele upodabljanja. V tem poglavju si bomo ogledali API za tiskanje Java.
Vsi razredi, potrebni za tiskanje, se nahajajo v java.awt.print
paket, ki je sestavljen iz treh vmesnikov in štirih razredov. Naslednje tabele opredeljujejo razrede in vmesnike tiskalnega paketa.
Ime | Tip | Opis |
Papir | Razred | Ta razred opredeljuje fizične lastnosti strani. |
PageFormat | Razred | PageFormat določa velikost in usmerjenost strani. Določa tudi, kateri Papir za uporabo pri upodabljanju strani. |
PrinterJob | Razred | Ta razred upravlja tiskalno opravilo. Njegove odgovornosti vključujejo ustvarjanje tiskalnega opravila, prikaz pogovornega okna za tiskanje, kadar je to potrebno, in tiskanje dokumenta. |
Knjiga | Razred |
|
Pageable | Vmesnik | A Pageable izvedba predstavlja nabor strani, ki jih je treba natisniti. The Pageable vrne skupno število strani v naboru kot tudi PageFormat in Za tiskanje za določeno stran. The Knjiga class izvaja ta vmesnik. |
Za tiskanje | Vmesnik | Slikar strani mora implementirati Za tiskanje vmesnik. V tem vmesniku je samo ena metoda, natisni () . |
PrinterGraphics | Vmesnik | The Grafika object izvaja ta vmesnik. PrinterGraphics zagotavlja getPrinterJob () za pridobitev tiskalniškega opravila, ki je sprožilo postopek tiskanja. |
Pageable vmesnik
The Pageable
vmesnik vključuje tri metode:
Ime metode | Opis |
int getNumberOfPages () | Vrne število strani v dokumentu. |
PageFormat getPageFormat (int pageIndex) | Vrne strani PageFormat kot določa pageIndex . |
Natisljiv getPrintable (int pageIndex) | Vrne Za tiskanje primerek, odgovoren za upodabljanje strani, ki jo določi pageIndex . |
Vmesnik za tiskanje
The Za tiskanje
vmesnik ima eno metodo in dve vrednosti:
Ime | Tip | Opis |
int print (grafična grafika, PageFormat pageFormat, int pageIndex) | Metoda | Zahteva, da grafični ročaj, ki uporablja dani format strani, upodobi določeno stran. |
NO_SUCH_PAGE | Vrednost | To je stalnica. Vrnite to vrednost, da označite, da ni več strani za tiskanje. |
PAGE_EXISTS | Vrednost | The natisni () metoda vrne PAGE_EXISTS . Označuje, da je bila stran posredovana kot parameter natisni () je bila upodobljena in obstaja. |
Vsak slikar strani mora uporabiti Za tiskanje
vmesnik. Ker je na voljo le ena metoda, se zdi ustvarjanje slikarjev strani enostavno. Vendar ne pozabite, da mora vaša koda omogočiti upodabljanje katere koli strani v zaporedju ali izven njega.
Obstajajo trije parametri natisni ()
, vključno z Grafika
, kar je isti razred, s katerim so risali na zaslonu. Ker je Grafika
razred izvaja Tiskalnik Graphic
vmesnik, lahko dobite PrinterJob
ki je ustvaril to tiskalno opravilo. Če je postavitev strani zapletena in zahteva nekatere napredne funkcije risanja, jo lahko predvajate Grafika
parameter v a Grafika2D
predmet. Nato boste imeli dostop do celotnega Java 2D API-ja.
Preden začnete uporabljati Grafika
predmeta, upoštevajte, da koordinate niso prevedene v zgornji levi kot območja za tiskanje. Glejte sliko 3, da poiščete lokacijo privzetega izvora.
(0, 0) se prikaže v zgornjem levem kotu robov tiskalnika. Za tiskanje pravokotnika velikosti 1 x 1 palca, oddaljenega 1 palca od zgornjega in levega roba, uporabite naslednjo kodo:
1: javni int tisk (grafična grafika, PageFormat pageFormat, int pageIndex) {2: Graphics2D graphics2D = (Graphics2D) grafika; 3: Rectangle2D.Double pravokotnik = nov Rectangle2D.Double (); 4: rectangle.setRect (pageFormat.getImageableX () + 72, 5: pageFormat.getImageableY () + 72, 6: 72, 7: 72); 8: graphics2D.draw (pravokotnik); 9: vrnitev (PAGE_EXISTS); }
Iz prejšnjega primera vidimo, da moramo izvor pravokotnika ročno prevesti tako, da se natisne na vrh območja za tiskanje, kot je na sliki 1. Za poenostavitev kode lahko koordinate prevedemo enkrat in uporabimo (0, 0 ) kot izvor območja za tiskanje. S spreminjanjem prejšnjega primera dobimo:
1: javni int tisk (grafična grafika, PageFormat pageFormat, int pageIndex) {2: Graphics2D graphics2D = (Graphics2D) grafika; 3: graphics2D.translate (pageFormat.getImageableX (), pageFormat.getImageableY ()); 4: Rectangle2D.Double pravokotnik = nov Rectangle2D.Double (); 5: pravokotnik.setRect (72, 72, 72, 72); 6: graphics2D.draw (pravokotnik); 7: vrnitev (PAGE_EXISTS); 8:}
Uporabljati prevesti()
v vrstici 3 lahko koordinate prevedemo in svoj izvor (0, 0) nastavimo na vrh območja za tiskanje. Od tega trenutka naprej bo naša koda poenostavljena.
Vmesnik PrinterGraphics
The PrinterGraphics
vmesnik je sestavljen iz ene metode:
Ime metode | Opis |
PrinterJob getPrinterJob () | Vrne PrinterJob za to zahtevo za upodabljanje in jo izvaja Grafika razred |
Razred papirja
Osem metod sestavlja Papir
razred:
Ime metode | Opis |
dvojni getHeight () | Ta metoda vrne fizično višino strani v točkah (1 palec = 72 točk). Če na primer tiskate na strani velikosti črk, bo vrnjena vrednost 792 točk ali 11 palcev. |
dvojni getImageableHeight () | Ta metoda vrne slikovno višino strani. Slikovna višina je višina območja za tiskanje, na katerem lahko risate. Za grafični prikaz slikovnega območja glejte sliko 1. |
dvojna getImageableWidth () | Ta metoda vrne slikovno širino strani (širino območja za tiskanje, ki ga lahko narišete). Za grafični prikaz slikovnega območja glejte sliko 1. |
dvojni getImageableX () | Ta metoda vrne x izvor slikovnega območja. Ker ni podpore za robove, vrnjena vrednost predstavlja levi rob. |
dvojni getImageableY () | Ta metoda vrne izvor y slikovnega območja. Vrednost, vrnjena s to metodo, je enaka zgornjemu robu. |
dvojna getWidth () | Ta metoda vrne fizično širino strani v točkah. Če tiskate na papir velikosti letter, je širina 8,5 palca ali 612 točk. |
void setImageableArea (dvojni x, dvojni y, dvojna širina, dvojna višina) | Ta metoda nastavi slikovno območje in določi robove na strani. Pravzaprav API ne ponuja nobene metode za izrecno nastavitev robov; sami jih morate izračunati. |
void setSize (dvojna širina, dvojna višina) | Ta metoda nastavi fizično velikost strani. Če želite definirati list velikosti 8,5 x 11 palcev, bi navedli 612 in 792 točk. Privzeta velikost je PISMO . |
Preden nadaljujemo z naslednjim odsekom, ne pozabite, da Papir
razred opredeljuje fizične značilnosti strani. The PageFormat
razred predstavlja vse značilnosti strani, kot so usmerjenost strani, velikost in vrsta papirja. Ta razred se vedno posreduje kot parameter Za tiskanje
vmesniki natisni ()
metoda. Uporaba Papir
pridobiti lokacijo, velikost in usmerjenost strani slikovnega območja skupaj z matriko preoblikovanja.
Razred PageFormat
The PageFormat
je sestavljen iz 12 metod:
Ime metode | Opis |
dvojni getHeight () | Ta metoda vrne fizično višino strani v točkah (1 palec = 72 točk). Če vaša stran meri 8,5 krat 11 palcev, bo vrnjena vrednost 792 točk ali 11 palcev. |
dvojni getImageableHeight () | Ta metoda vrne slikovno višino strani, ki je višina območja za tiskanje, na katerem lahko narišete. Za grafični prikaz slikovnega območja glejte sliko 1. |
dvojna getImageableWidth () | Ta metoda vrne slikovno širino strani - širino območja za tiskanje, na katerem lahko rišete. Slika 1 prikazuje grafični prikaz slikovnega območja. |
dvojni getImageableX () | Ta metoda vrne x izvor slikovnega območja. |
dvojni getImageableY () | Ta metoda vrne izvor y slike slikovnega območja. |
dvojna getWidth () | Ta metoda vrne fizično širino strani v točkah. Če tiskate na papir velikosti letter, je širina 8,5 palca ali 612 točk. |
dvojni getHeight () | Ta metoda vrne fizično višino strani v točkah. Na primer, papir velikosti črke je visok 11 centimetrov ali 792 točk. |
double [] getMatrix () | Ta metoda vrne matriko preoblikovanja, ki uporabniški prostor pretvori v zahtevano usmeritev strani. Vrnjena vrednost je v obliki, ki jo zahteva AffineTransform konstruktor. |
int getOrientation () | Ta metoda vrne usmerjenost strani kot bodisi PORTRET ali POKRAJINA . |
void setOrientation (int orientacija) | Ta metoda nastavi usmerjenost strani z uporabo konstant PORTRET in POKRAJINA . |
Papir getPaper () | Ta metoda vrne Papir predmet, povezan z obliko strani. Za opis datoteke glejte prejšnji odsek Papir razred. |
void setPaper (papirnati papir) | Ta metoda nastavi Papir predmet, ki ga bo uporabil PageFormat razred. PageFormat za dokončanje te naloge mora imeti dostop do značilnosti fizične strani. |
S tem je zaključen opis razredov strani. Naslednji razred, ki ga bomo preučevali, je PrinterJob
.
Razred PrinterJob
The PrinterJob
class nadzoruje postopek tiskanja. Lahko tiska tiskalno opravilo in ga nadzira. Spodaj najdete definicijo razreda:
Ime metode | Opis |
abstraktno razveljavitev praznine | Ta metoda prekliče trenutno tiskalno opravilo. Preklic lahko potrdite z isCancel () metoda. |
abstraktna logična vrednost isCancelled () | Ta metoda vrne vrednost true, če je opravilo preklicano. |
PageFormat defaultPage () | Ta metoda vrne privzeto obliko strani za PrinterJob . |
povzetek PageFormat defaultPage (stran PageFormat) | Ta metoda klonira PageFormat prenese parametre in spremeni klon, da ustvari privzeto PageFormat . |
povzetek int getCopies () | Ta metoda vrne število kopij, ki jih bo tiskalno opravilo natisnilo. |
abstract void setCopies (int kopije) | Ta metoda nastavi število kopij, ki jih bo opravilo natisnilo. Če prikažete pogovorno okno za tiskanje, lahko uporabniki spremenijo število kopij (glejte pageDialog metoda). |
abstraktni niz getJobName () | Ta metoda vrne ime opravila. |
statični PrinterJob getPrinterJob () | Ta metoda ustvari in vrne novo PrinterJob . |
abstraktni niz getUserName () | Ta metoda vrne uporabniško ime, povezano s tiskalnim opravilom. |
povzetek PageFormat pageDialog (StranFormat strani) | Ta metoda prikaže pogovorno okno, ki uporabniku omogoča spreminjanje PageFormat . The PageFormat , preneseno v parametre, nastavi polja pogovornega okna. Če uporabnik prekliče pogovorno okno, potem izvirnik PageFormat bo vrnjeno. Če pa uporabnik sprejme parametre, potem novo PageFormat bo ustvarjen in vrnjen. Ker ne bo prikazal enakih parametrov v vseh operacijskih sistemih, bodite previdni pri uporabi pageDialog . |
abstract void setPageable (Pageable dokument) | Ta metoda po dokumentu poizve, da bi ugotovila skupno število strani. The Pageable bo vrnil tudi PageFormat in Za tiskanje predmet za vsako stran. Glej definicijo Pageable vmesnik za več informacij. |
abstract void setPrintable (Printable painter) | Ta metoda nastavi Slikar predmet, ki bo upodobil strani za tiskanje. A Slikar objekt je objekt, ki izvaja Za tiskanje razred in njegovo natisni () metoda. |
abstract void setPrintable (Barva za tiskanje, format PageFormat) | Ta metoda dokonča enake naloge kot abstract void setPrintable (Printable painter) , le da dobaviš PageFormat da Slikar bo uporabil. Kot je navedeno v definiciji Za tiskanje vmesnik, natisni () metoda opravi a PageFormat objekt kot prvi parameter. |
abstraktni void tisk () | Ta metoda natisne dokument. Pravzaprav pokliče natisni () metoda Slikar predhodno dodeljeno temu tiskalnemu poslu. |
abstract void setJobName (String jobName) | Ta metoda nastavi ime tiskalnega opravila. |
abstraktni logični tiskDialog () | Ta metoda prikaže pogovorno okno za tiskanje, ki uporabniku omogoča spreminjanje parametrov tiskanja. Rezultati te interakcije ne bodo vrnjeni v vaš program. Namesto tega bo posredovana enakovrednemu operacijskemu sistemu. |
povzetek PageFormat validatePage (stran PageFormat) | Ta metoda bo potrdila PageFormat v parametrih. Če tiskalnik ne more uporabiti datoteke PageFormat ki ste ga dobili, bo vrnjen nov, ki ustreza tiskalniku. |
Knjižni razred
Sedem metod sestavlja Knjiga
razred:
>
Ime metode | Opis |
void append (slikar za tiskanje, stran za obliko strani) | Ta metoda doda stran v Knjiga . The slikar in PageFormat za to stran se podajo parametri. |
void append (slikar za tiskanje, stran PageFormat, int numPages) | Ta metoda dokonča enake naloge kot void append (slikar za tiskanje, stran za obliko strani) , le da določite število strani. |
int getNumberOfPages () | Ta metoda vrne število strani, ki so trenutno v Knjiga . |
PageFormat getPageFormat (int pageIndex) | Ta metoda vrne PageFormat predmet za določeno stran. |
Natisljiv getPrintable (int pageIndex) | Ta metoda vrne slikar za določeno stran. |
void setPage (int pageIndex, slikar za tiskanje, stran PageFormat) | Ta metoda nastavi slikar in PageFormat za določeno stran, ki je že v knjigi. |
Tiskarski recept
Recept za tisk je zelo preprost. Najprej ustvarite a PrinterJob
objekt:
PrinterJob printJob = PrinterJob.getPrinterJob ();
Nato z uporabo setPrintable ()
metoda PrinterJob
, dodelite Slikar
ugovarjajo PrinterJob
. Upoštevajte, da a Slikar
je tisti, ki izvaja Za tiskanje
vmesnik.
printJob.setPrintable (Slikar);
Ali pa lahko nastavite PageFormat
skupaj z Slikar
:
printJob.setPrintable (Slikar, pageFormat);
Končno, Slikar
objekt mora izvajati natisni ()
metoda:
javni int tisk (Graphics g, PageFormat pageFormat, int page)
Tu je prvi parameter grafični ročaj, ki ga boste uporabili za upodabljanje strani, pageFormat
je oblika, ki bo uporabljena za trenutno stran, zadnji parameter pa je številka strani, ki jo je treba upodobiti.
To je vse - za preprosto tiskanje, torej.
Uvod v okvir
Okvir za tiskanje, ki ga bomo zgradili v tej seriji, bo popolnoma neodvisen od API-ja za tiskanje Java. Omogočil bo večjo prilagodljivost pri ustvarjanju različnih rezultatov.Njegova struktura vam omogoča ustvarjanje dokumentov, strani in tiskanje predmetov. Med dodajanjem strani v dokument boste na stran lahko dodali tiskane predmete. Z uporabo te strukture boste lahko enostavno implementirali izvozne funkcije v datoteke PDF ali HTML ali tiskali neposredno v tiskalnik s pomočjo API-ja za tiskanje. Toda glavni cilj okvira je poenostaviti ustvarjanje tiskanih dokumentov. Ko tiskate s tiskalnim API-jem, dobite samo grafično platno, na katerega lahko narišete. Ne obravnava konceptov odstavkov, slik, risb, grafik, tabel ali tekočih glav in nog. Ker morate izračunati izvor (x, y), širino in višino območja za tiskanje, je nastavitev robov težavna naloga. Naš tiskarski okvir bo odpravil vse te slabosti.
Zaključek
V tem prvem delu smo pokrili veliko tal. Ogledali smo si merske enote, strukturo strani, dva modela upodabljanja (Pageable
in Za tiskanje
) in Knjige
, in zaključili smo s podrobno razlago tiskalnega API-ja. Naslednji mesec se bomo osredotočili predvsem na kodo, saj bomo vse udejanjali v praksi. Ogledali si bomo tudi težave, ki se pojavijo pri tiskanju na več platformah. V prihodnjem 3. delu bom podrobno razložil zasnovo in izvajanje okvira.
Preberite več o tej temi
- "Tiskanje v Javi", Jean-Pierre Dubé (JavaWorld)
- 1. del: Spoznajte model tiskanja Java (20. oktober 2000)
- 2. del: Natisnite svojo prvo stran in upodabljajte zapletene dokumente (1. december 2000)
- 3. del: Jean-Pierre Dubé predstavlja tiskalni okvir, ki deluje nad Java Print API (5. januar 2001)
- 4. del: kodirajte ogrodje tiska
- (2. februar 2001)
- 5. del: Odkrijte razrede podpore za ogrodje za tiskanje
- (2. marec 2001)
- Našli boste na tone knjig, ki zajemajo Java AWT, vendar nobena ne bo obravnavala te teme v obsegu te knjige. Če pišete GUI, morate imeti to knjigo zraven računalnika: Grafična Java 2, Obvladovanje JFCAWT, Zvezek 1, David M. Geary (dvorana Prentice, 1998)
//www.amazon.com/exec/obidos/ASIN/0130796662/javaworld
- Ta knjiga je bila v pomoč, ko je izšla Java 1.1, in je prva govorila o tiskanju v Javi: Prehod z Jave 1.0 na Javo 1.1, Daniel I. Joshi in Pavel A. Vorobiev (Ventana Communications Group, 1997)
//www.amazon.com/exec/obidos/ASIN/1566046866/javaworld
- Verjetno najboljša knjiga o Javi 2D, ta knjiga zajema vse vidike 2D API-ja in vsebuje tudi
Grafika
okvir za napredne 2D skladbe: Java 2D API grafika, Vincent J. Hardy (dvorana Prentice, 1999)//www.amazon.com/exec/obidos/ASIN/0130142662/javaworld
- Odličen uvod v Java 2D API "Uvod v Java 2D," Bill Day (JavaWorld, Julij 1998)
//www.javaworld.com/javaworld/jw-07-1998/jw-07-media.html
To zgodbo "Tiskanje v Javi, 1. del" je prvotno objavil JavaWorld.