Atveidošanas modeļi
Java ir divi drukas modeļi: Drukājams
darbavietas un Pāriet
darbavietas.
Printable
Drukājams
darbs ir vienkāršāks no diviem drukas modeļiem. Šis modelis izmanto tikai vienu PagePainter
par visu dokumentu. Lapas tiek renderētas secīgi, sākot ar nulles lapu. Kad pēdējā lapa tiek izdrukāta, jūsu PagePainter
jāatdod NO_SUCH_PAGE
vērtība. Drukas apakšsistēma vienmēr pieprasīs, lai lietojumprogramma renderētu lapas pēc kārtas. Piemēram, ja jūsu lietojumprogrammai tiek lūgts atveidot piecas līdz septiņas lappuses, drukas apakšsistēma pieprasīs visas lappuses līdz septītajai lappusei, bet drukās tikai piecas, sešas un septiņas lappuses. Ja jūsu lietojumprogrammā tiek parādīts drukāšanas dialoglodziņš, kopējais drukājamo lapu skaits netiks parādīts, jo, izmantojot šo modeli, nav iespējams iepriekš uzzināt lappušu skaitu dokumentā.
Pārskatāmas
Pāriet
darba vietas piedāvā lielāku elastību nekā Drukājams
darbavietas, jo katra a Pāriet
darbam var būt atšķirīgs izkārtojums. Pāriet
darba vietas visbiežāk tiek izmantotas Grāmata
s, lapu kolekcija, kurai var būt dažādi formāti. Es paskaidrošu Grāmata
klases pēc mirkļa.
A Pāriet
darbam ir šādas īpašības:
- Katrai lapai var būt savs gleznotājs. Piemēram, jums varētu būt gleznotājs, kas ieviesis vāka lapu, cits gleznotājs, lai izdrukātu satura rādītāju, un trešais, lai izdrukātu visu dokumentu.
- Katrai grāmatas lapai varat iestatīt atšķirīgu lapas formātu. Iekšā
Pāriet
darbu, varat sajaukt portreta un ainavas lapas. - Drukas apakšsistēma var lūgt jūsu lietojumprogrammu drukāt lapas ārpus secības, un vajadzības gadījumā dažas lapas var tikt izlaistas. Atkal jums par to nav jāuztraucas, kamēr pēc pieprasījuma varat piegādāt jebkuru sava dokumenta lapu.
- The
Pāriet
darbam nav jāzina, cik lappušu ir dokumentā.
Grāmatas
Arī jauns, jo 1.2 versija ir Grāmata
klasē. Šī klase ļauj jums izveidot vairāku lapu dokumentus. Katrai lapai var būt savs formāts un savs gleznotājs, dodot jums iespēju izveidot sarežģītus dokumentus. Kopš Grāmata
klase īsteno Pāriet
interfeisu, jūs varētu ieviest savu Grāmata
klasē, kad paredzēts Grāmata
klasē trūkst nepieciešamo funkciju.
A Grāmata
klase apzīmē lapu kolekciju. Pirmo reizi izveidojot, Grāmata
objekts ir tukšs. Lai pievienotu lapas, jums vienkārši jāizmanto viens no abiem pievienot ()
metodes (lai iegūtu sīkāku informāciju, skatiet manu šīs klases skaidrojumu API sadaļā). Šīs metodes parametri ir PageFormat
objekts, kas nosaka lapas fiziskās īpašības, un a PagePainter
objekts, kas īsteno Drukājams
interfeiss. Ja nezināt lappušu skaitu savā dokumentā, vienkārši nododiet UNKNOWN_NUMBER_OF_PAGES
vērtība pievienot ()
metodi. Printera sistēma automātiski atradīs lappušu skaitu, piezvanot visiem grāmatas gleznotājiem, līdz tā saņem a NO_SUCH_PAGE
vērtība.
API definīcija
Šajā sadaļā tiksies teorija un prakse. Iepriekšējās sadaļās mēs uzzinājām par lapu struktūru, mērvienībām un atveidošanas modeļiem. Šajā sadaļā mēs aplūkosim Java drukāšanas API.
Visas klases, kas nepieciešamas drukāšanai, atrodas java.awt.print
pakete, kas sastāv no trim saskarnēm un četrām klasēm. Šīs tabulas nosaka drukas pakotnes klases un saskarnes.
Nosaukums | Tips | Apraksts |
Papīrs | Klase | Šī klase nosaka lapas fiziskās īpašības. |
PageFormat | Klase | PageFormat nosaka lapas lielumu un orientāciju. Tas arī nosaka, kurš Papīrs izmantot renderējot lapu. |
PrinterisDarbs | Klase | Šī klase pārvalda drukas darbu. Tās pienākumos ietilpst drukas darba izveidošana, drukāšanas dialoglodziņa parādīšana, ja nepieciešams, un dokumenta drukāšana. |
Grāmata | Klase |
|
Pāriet | Saskarne | A Pāriet ieviešana apzīmē drukājamo lapu kopu. The Pāriet objekts atgriež kopas kopējo lapu skaitu, kā arī PageFormat un Drukājams norādītajai lapai. The Grāmata klase ievieš šo saskarni. |
Drukājams | Saskarne | Lapu gleznotājam ir jāievieš Drukājams interfeiss. Šajā saskarnē ir tikai viena metode, izdrukāt () . |
PrinterGrafika | Saskarne | The Grafika objekts ievieš šo saskarni. PrinterGrafika nodrošina getPrinterJob () metode, lai iegūtu printera darbu, kas saīsināja drukas procesu. |
Lapošanas saskarne
The Pāriet
interfeiss ietver trīs metodes:
Metodes nosaukums | Apraksts |
int getNumberOfPages () | Atgriež dokumenta lappušu skaitu. |
PageFormat getPageFormat (int pageIndex) | Atgriež lapas PageFormat kā norādījis pageIndex . |
Printable getPrintable (int pageIndex) | Atgriež Drukājams instances, kas atbildīga par. lapas norādīšanu pageIndex . |
Drukājama saskarne
The Drukājams
saskarnē ir viena metode un divas vērtības:
Nosaukums | Tips | Apraksts |
int druka (grafikas grafika, PageFormat pageFormat, int pageIndex) | Metode | Pieprasa, lai grafikas apstrāde, izmantojot norādīto lapas formātu, renderētu norādīto lapu. |
NO_SUCH_PAGE | Vērtība | Tas ir nemainīgs. Atgriežot šo vērtību, norādiet, ka vairs nav drukājamu lapu. |
PAGE_EXISTS | Vērtība | The izdrukāt () metode atgriež PAGE_EXISTS . Tas norāda, ka lapa tika nodota kā parametrs izdrukāt () ir atveidots un pastāv. |
Katram lapas gleznotājam ir jāievieš Drukājams
interfeiss. Tā kā ieviest ir tikai viena metode, lapu gleznotāju izveide var šķist viegli. Tomēr atcerieties, ka ar jūsu kodu jāspēj atveidot jebkuru lapu secībā vai ārpus tās.
Ir trīs parametri izdrukāt ()
, ieskaitot Grafika
, kas ir tā pati klase, kuru izmantoja, lai zīmētu uz ekrāna. Kopš Grafika
klase īsteno PrinterisGrafisks
interfeisu, varat iegūt PrinterisDarbs
kas šo drukas darbu padarīja aktuālāku. Ja jūsu lapas izkārtojums ir sarežģīts un tam ir nepieciešamas dažas uzlabotas zīmēšanas funkcijas, varat to apraidīt Grafika
parametrs a Grafika2D
objekts. Pēc tam jums būs piekļuve pilnai Java 2D API.
Pirms sākat lietot Grafika
objektu, ņemiet vērā, ka koordinātas netiek tulkotas izdrukājamās zonas augšējā kreisajā stūrī. Skatiet 3. attēlu, lai atrastu noklusējuma izcelsmes vietu.
(0, 0) parādās printera piemales augšējā kreisajā stūrī. Lai drukātu 1 x 1 collu taisnstūri, 1 collu gan no augšējās, gan kreisās malas, izmantojiet šādu kodu:
1: public int print (grafikas grafika, PageFormat pageFormat, int pageIndex) {2: Graphics2D graphics2D = (Graphics2D) grafika; 3: taisnstūris2D. Dubultstaisnstūris = jauns taisnstūris2D. Divkāršs (); 4: taisnstūris.setRect (pageFormat.getImageableX () + 72, 5: pageFormat.getImageableY () + 72, 6: 72, 7: 72); 8: graphics2D.draw (taisnstūris); 9: atgriešanās (PAGE_EXISTS); }
No iepriekšējā piemēra mēs redzam, ka mums ir manuāli jātulko taisnstūra izcelsme, lai tas tiktu izdrukāts drukājamā apgabala augšdaļā, kā parādīts 1. attēlā. Lai vienkāršotu kodu, mēs varētu vienreiz tulkot koordinātas un izmantot ) kā drukas laukuma izcelsmi. Pārveidojot iepriekšējo piemēru, mēs iegūstam:
1: public int print (grafikas grafika, PageFormat pageFormat, int pageIndex) {2: Graphics2D graphics2D = (Graphics2D) grafika; 3: graphics2D.translate (pageFormat.getImageableX (), pageFormat.getImageableY ()); 4: taisnstūris2D. Dubultā taisnstūris = jauns taisnstūris2D. Divkāršs (); 5: taisnstūris.setRect (72, 72, 72, 72); 6: graphics2D.draw (taisnstūris); 7: atgriešanās (PAGE_EXISTS); 8:}
Izmantojot tulkot ()
metodi 3. rindā, mēs varam tulkot koordinātas un iestatīt mūsu izcelsmi (0, 0) izdrukājamā apgabala augšpusē. No šī brīža mūsu kods tiks vienkāršots.
PrinterGraphics saskarne
The PrinterGrafika
saskarne sastāv no vienas metodes:
Metodes nosaukums | Apraksts |
PrinterJob getPrinterJob () | Atgriež PrinterisDarbs šim renderēšanas pieprasījumam, un to īsteno Grafika klasē |
Papīra klase
Astoņas metodes veido Papīrs
klase:
Metodes nosaukums | Apraksts |
dubultā getHeight () | Šī metode atgriež lapas fizisko augstumu punktos (1 colla = 72 punkti). Piemēram, ja drukājat uz burta lieluma lapu, atgriešanās vērtība būs 792 punkti jeb 11 collas. |
dubultā getImageableHeight () | Šī metode atgriež lapas iedomājamo augstumu. Iedomājamais augstums ir drukas laukuma augstums, uz kura jūs varat uzzīmēt. Iedomājamā laukuma grafisko skatu skatiet 1. attēlā. |
dubultā getImageableWidth () | Šī metode atgriež lapas iedomājamo platumu (drukas laukuma platumu, uz kuru varat uzzīmēt). Iedomājamā laukuma grafisko skatu skatiet 1. attēlā. |
dubultā getImageableX () | Šī metode atgriež iztēlojamā apgabala x izcelsmi. Tā kā piemales netiek atbalstītas, atgriešanās vērtība apzīmē kreiso rezervi. |
dubultā getImageableY () | Šī metode atgriež iedomājamā apgabala y izcelsmi. No šīs metodes atgrieztā vērtība ir ekvivalenta augšējai robežai. |
dubultā getWidth () | Šī metode atgriež lapas fizisko platumu punktos. Ja drukājat uz burta izmēra papīra, platums ir 8,5 collas jeb 612 punkti. |
void setImageableArea (dubultā x, dubultā y, dubultā platumā, dubultā augstumā) | Šī metode nosaka iedomājamo laukumu un norāda malas lapā. Patiesībā API nenodrošina metodi, kā skaidri iestatīt rezerves; jums tie jāaprēķina pašiem. |
void setSize (dubultā platumā, dubultā augstumā) | Šī metode nosaka fizisko lapas lielumu. Lai definētu 8,5x11 collu lapu, jums jānodrošina 612 un 792 punkti. Ņemiet vērā, ka noklusējuma izmērs ir VĒSTULE . |
Pirms pārejam uz nākamo sadaļu, atcerieties, ka Papīrs
klasē definē lapas fiziskās īpašības. The PageFormat
klasē pārstāv visas lapas īpašības, piemēram, lapas orientācija, izmērs un papīra veids. Šī klase vienmēr tiek nodota kā parametrs Drukājams
saskarnes izdrukāt ()
metodi. Izmantot Papīrs
lai iegūtu iztēlojamā apgabala atrašanās vietu, izmēru un lapas orientāciju kopā ar transformācijas matricu.
PageFormat klase
The PageFormat
sastāv no 12 metodēm:
Metodes nosaukums | Apraksts |
dubultā getHeight () | Šī metode atgriež lapas fizisko augstumu punktos (1 colla = 72 punkti). Ja jūsu lapas izmērs ir 8,5 x 11 collas, atgriešanās vērtība būs 792 punkti jeb 11 collas. |
dubultā getImageableHeight () | Šī metode atgriež lapas iedomājamo augstumu, kas ir drukas laukuma augstums, uz kura jūs varat uzzīmēt. Iedomājamā laukuma grafisko skatu skatiet 1. attēlā. |
dubultā getImageableWidth () | Šī metode atgriež lapas iedomājamo platumu - drukas laukuma platumu, uz kura varat uzzīmēt. 1. attēlā parādīts iedomājamā laukuma grafiskais skats. |
dubultā getImageableX () | Šī metode atgriež iztēlojamā apgabala x izcelsmi. |
dubultā getImageableY () | Šī metode atgriež iedomājamā apgabala y izcelsmi. |
dubultā getWidth () | Šī metode atgriež lapas fizisko platumu punktos. Ja drukājat uz burta izmēra papīra, platums ir 8,5 collas jeb 612 punkti. |
dubultā getHeight () | Šī metode atgriež lapas fizisko augstumu punktos. Piemēram, burtu formāta papīra augstums ir 11 collas jeb 792 punkti. |
dubultā [] getMatrix () | Šī metode atgriež transformācijas matricu, kas pārveido lietotāja vietu pieprasītajā lapas orientācijā. Atgriešanās vērtība ir formātā, kuru pieprasa AffineTransform konstruktors. |
int getOrientation () | Šī metode atgriež lapas orientāciju kā vienu vai otru PORTRETS vai AINAVA . |
void setOrientation (int orientācija) | Šī metode nosaka lapas orientāciju, izmantojot konstantes PORTRETS un AINAVA . |
Papīrs getPaper () | Šī metode atgriež Papīrs objekts, kas saistīts ar lapas formātu. Skatiet iepriekšējo sadaļu, lai aprakstītu Papīrs klasē. |
void setPaper (papīra papīrs) | Šī metode nosaka Papīrs objekts, kuru izmantos PageFormat klasē. PageFormat Lai veiktu šo uzdevumu, ir jābūt piekļuvei fiziskajām lapas īpašībām. |
Ar to tiek pabeigts lapu klašu apraksts. Nākamā klase, kuru mācīsimies, ir PrinterisDarbs
.
PrinterJob klase
The PrinterisDarbs
klase kontrolē drukāšanas procesu. Tas var gan saīsināt, gan kontrolēt drukas darbu. Zemāk jūs atradīsit klases definīciju:
Metodes nosaukums | Apraksts |
abstrakts anulēt atcelt () | Šī metode atceļ pašreizējo drukas darbu. Jūs varat apstiprināt atcelšanu, izmantojot isCancel () metodi. |
abstraktais būla skaitlis ir atcelts () | Šī metode atgriež vērtību true, ja darbs tiek atcelts. |
PageFormat defaultPage () | Šī metode atgriež noklusējuma lapas formātu PrinterisDarbs . |
abstrakts PageFormat defaultPage (PageFormat lapa) | Šī metode klonē PageFormat parametros un modificē klonu, lai izveidotu noklusējumu PageFormat . |
abstrakts int getCopies () | Šī metode atgriež drukas darba izdrukājamo kopiju skaitu. |
abstract void setCopies (int kopijas) | Šī metode nosaka kopiju skaitu, ko darbs izdrukās. Ievērojiet, ka, parādot drukāšanas dialoglodziņu, lietotāji var mainīt kopiju skaitu (skatiet pageDialog metode). |
abstrakta virkne getJobName () | Šī metode atgriež darba nosaukumu. |
statiskais PrinterJob getPrinterJob () | Šī metode rada un atgriež jaunu PrinterisDarbs . |
abstrakta virkne getUserName () | Šī metode atgriež ar drukas darbu saistīto lietotāja vārdu. |
abstrakta PageFormat pageDialog (PageFormat lapa) | Šī metode parāda dialoglodziņu, kas ļauj lietotājam modificēt PageFormat . The PageFormat , kas nodots parametros, iestata dialoglodziņa laukus. Ja lietotājs atceļ dialogu, tad oriģināls PageFormat tiks atgriezta. Bet, ja lietotājs pieņem parametrus, tad jaunu PageFormat tiks izveidoti un atgriezti. Tā kā tas neparādīs vienādus parametrus visās operētājsistēmās, jums jābūt uzmanīgiem, lietojot pageDialog . |
abstract void setPageable (lapojams dokuments) | Šī metode vaicā dokumentu, lai iegūtu kopējo lapu skaitu. The Pāriet atgriezīs arī PageFormat un Drukājams objekts katrai lapai. Skatīt definīciju Pāriet interfeiss, lai iegūtu vairāk informācijas. |
abstract void setPrintable (apdrukājams gleznotājs) | Šī metode nosaka Gleznotājs objekts, kas padarīs drukājamās lapas. A Gleznotājs objekts ir objekts, kas īsteno Drukājams klase un tās izdrukāt () metodi. |
abstract void setPrintable (drukājams gleznotājs, formāts PageFormat) | Šī metode izpilda tos pašus uzdevumus kā abstract void setPrintable (apdrukājams gleznotājs) , izņemot to, ka jūs piegādājat PageFormat ka Gleznotājs izmantos. Kā norādīts programmas definīcijā Drukājams interfeiss, izdrukāt () metode iet a PageFormat objekts kā pirmais parametrs. |
abstrakta tukša druka () | Šī metode izdrukā dokumentu. Tas faktiski sauc izdrukāt () metode Gleznotājs iepriekš piešķirts šim drukas darbam. |
abstrakts void setJobName (virknes darba nosaukums) | Šī metode nosaka drukas darba nosaukumu. |
abstrakts Būla drukājumsDialog () | Šī metode parāda drukāšanas dialoglodziņu, kas ļauj lietotājam mainīt drukas parametrus. Ņemiet vērā, ka šīs mijiedarbības rezultāts netiks atgriezts jūsu programmā. Tā vietā tā tiks nodota vienaudžu operētājsistēmai. |
abstrakts PageFormat validatePage (PageFormat lapa) | Šī metode apstiprinās PageFormat nodots parametros. Ja printeris nevar izmantot PageFormat ko piegādājāt, tad tiks atgriezta jauna, kas atbilst printerim. |
Grāmatu klase
Septiņas metodes veido Grāmata
klase:
>
Metodes nosaukums | Apraksts |
void append (Drukājams gleznotājs, PageFormat lapa) | Šī metode pievieno lapu Grāmata . The gleznotājs un PageFormat šai lapai tiek nodoti parametros. |
void append (Drukājams gleznotājs, PageFormat lapa, int numPages) | Šī metode izpilda tos pašus uzdevumus kā void append (Drukājams gleznotājs, PageFormat lapa) , izņemot to, ka jūs norādāt lapu skaitu. |
int getNumberOfPages () | Šī metode atgriež pašreizējo lapu skaitu Grāmata . |
PageFormat getPageFormat (int pageIndex) | Šī metode atgriež PageFormat objekts norādītajai lapai. |
Printable getPrintable (int pageIndex) | Šī metode atgriež gleznotājs par konkrēto lapu. |
void setPage (int pageIndex, apdrukājams gleznotājs, PageFormat lapa) | Šī metode nosaka gleznotājs un PageFormat par konkrētu lapu, kas jau ir grāmatā. |
Drukas recepte
Recepte drukāšanai ir ļoti vienkārša. Vispirms izveidojiet a PrinterisDarbs
objekts:
PrinterJob printJob = PrinterJob.getPrinterJob ();
Tālāk, izmantojot setPrintable ()
metode PrinterisDarbs
, piešķiriet Gleznotājs
iebilst pret PrinterisDarbs
. Ņemiet vērā, ka a Gleznotājs
objekts ir tāds, kas īsteno Drukājams
interfeiss.
printJob.setPrintable (gleznotājs);
Vai arī jūs varētu iestatīt PageFormat
kopā ar Gleznotājs
:
printJob.setPrintable (Painter, pageFormat);
Visbeidzot Gleznotājs
objektam ir jāievieš izdrukāt ()
metode:
public int print (Grafika g, PageFormat pageFormat, int lapa)
Pirmais parametrs ir grafiskais rokturis, kuru izmantosit lapas renderēšanai pageFormat
ir formāts, kas tiks izmantots pašreizējai lappusei, un pēdējais parametrs ir lappuses numurs, kas jāatveido.
Tas viss ir - vienkāršai drukāšanai, tas ir.
Ievads sistēmā
Drukas ietvars, ko mēs izveidosim šajā sērijā, būs pilnīgi neatkarīgs no Java drukāšanas API. Tas ļaus lielāku elastību dažādu rezultātu ražošanā.Tās struktūra ļaus jums izveidot dokumentus, lapas un drukāt objektus. Jūs drīkstat pievienot drukas objektus lapai, vienlaikus pievienojot lapas dokumentam. Izmantojot šo struktūru, jūs varēsiet ērti ieviest eksportēšanas funkcijas uz PDF vai HTML failiem vai drukāt tieši uz printeri, izmantojot drukas API. Bet ietvara galvenais mērķis ir vienkāršot drukātu dokumentu izveidi. Drukājot, izmantojot drukas API, jūs iegūstat tikai grafisku audeklu, uz kura var zīmēt. Tas nespēj pievērsties rindkopu, attēlu, zīmējumu, grafiku, tabulu vai skriešanas galvenes un kājenes jēdzieniem. Tā kā jums jāaprēķina (x, y) izcelsme, izdrukājamā laukuma platums un augstums, piemales iestatīšana ir sarežģīts darbs. Mūsu drukas ietvars novērsīs visus šos trūkumus.
Secinājums
Šajā pirmajā daļā mēs daudz pārklājām. Mēs apskatījām mērvienības, lapas struktūru, divus renderēšanas modeļus (Pāriet
un Drukājams
), un Grāmatas
, un mēs secinājām ar detalizētu skaidrojumu par drukāšanas API. Nākamajā mēnesī mēs galvenokārt pievērsīsimies kodam, jo visu īstenosim praksē. Mēs izskatīsim arī problēmas, kas rodas, drukājot uz vairākām platformām. Skatoties 3. daļu, es detalizēti paskaidrošu ietvara dizainu un ieviešanu.
Uzziniet vairāk par šo tēmu
- "Druka Java valodā", Žans Pjērs Dubē (JavaWorld)
- 1. daļa: Iepazīstieties ar Java drukāšanas modeli (2000. gada 20. oktobris)
- 2. daļa: Izdrukājiet savu pirmo lapu un atveidojiet sarežģītus dokumentus (2000. gada 1. decembris)
- 3. daļa: Žans Pjērs Dubē iepazīstina ar drukas sistēmu, kas darbojas virs Java Print API (2001. gada 5. janvāris)
- 4. daļa: kodējiet drukas sistēmu
- (2001. gada 2. februāris)
- 5. daļa: Atklājiet drukas ietvara atbalsta klases
- (2001. gada 2. marts)
- Jūs atradīsit daudz grāmatu, kas aptver Java AWT, taču neviena neaptvers šo tēmu šīs grāmatas apjomā. Ja rakstāt GUI, datoram jābūt blakus šai grāmatai: Grafiskā Java 2, JFCAWT apgūšana, 1. sējums, Deivids M. Gērijs (Prentice Hall, 1998)
//www.amazon.com/exec/obidos/ASIN/0130796662/javaworld
- Šī grāmata bija noderīga, kad iznāca Java 1.1, un tā bija pirmā, kas runāja par drukāšanu Java: Migrēšana no Java 1.0 uz Java 1.1, Daniels I. Joshi un Pāvels A. Vorobjevs (Ventana Communications Group, 1997)
//www.amazon.com/exec/obidos/ASIN/1566046866/javaworld
- Iespējams, ka tā ir labākā Java 2D grāmata, šī grāmata aptver visus 2D API aspektus un nodrošina arī
Grafika
ietvars uzlabotām 2D kompozīcijām: Java 2D API grafika, Vinsents Dž. Hārdijs (Prentice Hall, 1999)//www.amazon.com/exec/obidos/ASIN/0130142662/javaworld
- Lielisks ievads Java 2D API "Getting Started with Java 2D", Bill Day (JavaWorld, 1998. gada jūlijs)
//www.javaworld.com/javaworld/jw-07-1998/jw-07-media.html
Šo stāstu "Drukāšana Java, 1. daļa" sākotnēji publicēja JavaWorld.