Programiranje

Tiskanje v Javi, 1. del

Prejšnja 1 2 Stran 2 Stran 2 od 2

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 Knjigas, 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.

ImeTipOpis
PapirRazredTa razred opredeljuje fizične lastnosti strani.
PageFormatRazredPageFormat določa velikost in usmerjenost strani. Določa tudi, kateri Papir za uporabo pri upodabljanju strani.
PrinterJobRazred

Ta razred upravlja tiskalno opravilo. Njegove odgovornosti vključujejo ustvarjanje tiskalnega opravila, prikaz pogovornega okna za tiskanje, kadar je to potrebno, in tiskanje dokumenta.

KnjigaRazred

Knjiga predstavlja dokument. A Knjiga objekt deluje kot zbirka strani. Strani, vključene v Knjiga lahko imajo enake ali različne formate in lahko uporabljajo različne slikarje.

PageableVmesnikA 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 tiskanjeVmesnikSlikar strani mora implementirati Za tiskanje vmesnik. V tem vmesniku je samo ena metoda, natisni ().
PrinterGraphicsVmesnikThe 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 metodeOpis
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:

ImeTipOpis
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_PAGEVrednostTo je stalnica. Vrnite to vrednost, da označite, da ni več strani za tiskanje.
PAGE_EXISTSVrednostThe 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 metodeOpis
PrinterJob getPrinterJob ()Vrne PrinterJob za to zahtevo za upodabljanje in jo izvaja Grafika razred

Razred papirja

Osem metod sestavlja Papir razred:

Ime metodeOpis
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 metodeOpis
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 metodeOpis
abstraktno razveljavitev praznineTa 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 metodeOpis
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.

Jean-Pierre Dube je neodvisni svetovalec za Javo. Infocom je ustanovil leta 1988. Od takrat je Infocom razvil aplikacije po meri na področjih, vključno s proizvodnjo, upravljanjem dokumentov in velikim elektroenergetskim vodom. Jean-Pierre ima bogate izkušnje s programiranjem na C, Visual Basic in Javi; slednji je zdaj glavni jezik za vse nove projekte. To serijo posveča materi, ki je umrla med pisanjem tega članka.

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.

$config[zx-auto] not found$config[zx-overlay] not found