Programovanie

Tlač v Jave, 1. časť

Predchádzajúca 1 2 Strana 2 Strana 2 z 2

Vykresľovacie modely

V Jave existujú dva modely tlače: Pre tlač pracovných miest a Stránkovateľné pracovných miest.

Potlačiteľné

Pre tlač úlohy sú z týchto dvoch tlačových modelov jednoduchšie. Tento model používa iba jeden PagePainter pre celý dokument. Stránky sa vykresľujú postupne, počnúc nulou. Keď sa vytlačí posledná stránka, vaša PagePainter musí vrátiť NO_SUCH_PAGE hodnotu. Podsystém tlače bude vždy vyžadovať, aby aplikácia vykreslila stránky postupne. Napríklad ak je vaša aplikácia požiadaná o vykreslenie stránok päť až sedem, podsystém tlače požiada o všetky stránky až po siedmu stránku, ale vytlačí iba stránky päť, šesť a sedem. Ak vaša aplikácia zobrazí dialógové okno tlače, celkový počet strán, ktoré sa majú vytlačiť, sa nezobrazí, pretože pomocou tohto modelu nie je možné vopred zistiť počet strán v dokumente.

Objavy

Stránkovateľné pracovné miesta ponúkajú väčšiu flexibilitu ako Pre tlač pracovných miest, pretože každá stránka v a Stránkovateľné úloha môže obsahovať iné rozloženie. Stránkovateľné práce sa najčastejšie využívajú s Knihas, kolekcia stránok, ktoré môžu mať rôzne formáty. Vysvetlím Kniha triedy za chvíľu.

A Stránkovateľné práca má tieto vlastnosti:

  • Každá stránka môže mať vlastného maliara. Môžete si napríklad nechať implementovať maliara na tlač titulnej stránky, iného maliara na tlač obsahu a tretieho na tlač celého dokumentu.
  • Pre každú stránku v knihe môžete nastaviť iný formát stránky. V Stránkovateľné môžete kombinovať stránky na výšku a na šírku.
  • Podsystém tlače môže vyžadovať od vašej aplikácie, aby tlačila stránky mimo poradia, a niektoré stránky môžu byť v prípade potreby preskočené. Znova si s tým nemusíte robiť starosti, pokiaľ na požiadanie dodáte ktorúkoľvek stránku v dokumente.
  • The Stránkovateľné úloha nemusí vedieť, koľko strán je v dokumente.

Knihy

Novinkou od verzie 1.2 je tiež Kniha trieda. Táto trieda umožňuje vytvárať viacstranové dokumenty. Každá stránka môže mať svoj vlastný formát a vlastného maliara, čo vám dáva flexibilitu pri vytváraní sofistikovaných dokumentov. Keďže Kniha trieda implementuje Stránkovateľné môžete implementovať svoje vlastné Kniha triedy, ak je poskytnutá Kniha triede chýbajú funkcie, ktoré požadujete.

A Kniha trieda predstavuje zbierku stránok. Pri prvom vytvorení sa Kniha objekt je prázdny. Na pridanie stránok stačí použiť jednu z týchto dvoch stránok pridať () metódy (ďalšie podrobnosti nájdete v mojom vysvetlení tejto triedy v časti API). Parametre tejto metódy sú PageFormat objekt, ktorý definuje fyzikálne vlastnosti stránky, a a PagePainter objekt, ktorým sa realizuje Pre tlač rozhranie. Ak nepoznáte počet strán v dokumente, jednoducho odovzdajte znak UNKNOWN_NUMBER_OF_PAGES hodnota do pridať () metóda. Systém tlačiarní automaticky nájde počet strán tak, že zavolá všetkých maliarov stránok v knihe, kým nedostane a NO_SUCH_PAGE hodnotu.

Definícia API

V tejto časti sa stretneme s teóriou a praxou. V predchádzajúcich častiach sme sa dozvedeli o štruktúre stránky, jednotkách merania a vykresľovacích modeloch. V tejto časti sa pozrieme na Java Printing API.

Všetky triedy potrebné na tlač sa nachádzajú v java.awt.print balík, ktorý sa skladá z troch rozhraní a štyroch tried. Nasledujúce tabuľky definujú triedy a rozhrania tlačového balíka.

názovTypPopis
PapierTriedaTáto trieda definuje fyzikálne vlastnosti stránky.
PageFormatTriedaPageFormat definuje veľkosť a orientáciu stránky. Definuje tiež ktoré Papier použiť pri vykresľovaní stránky.
PrinterJobTrieda

Táto trieda spravuje tlačovú úlohu. Medzi jeho povinnosti patrí vytvorenie tlačovej úlohy, v prípade potreby zobrazenie tlačového dialógového okna a tlač dokumentu.

KnihaTrieda

Kniha predstavuje dokument. A Kniha objekt funguje ako zbierka stránok. Stránky zahrnuté v Kniha môže mať rovnaké alebo odlišné formáty a môže používať rôznych maliarov.

StránkovateľnéRozhranieA Stránkovateľné implementácia predstavuje množinu stránok, ktoré sa majú vytlačiť. The Stránkovateľné objekt vráti celkový počet strán v sade aj súbor PageFormat a Pre tlač pre zadanú stránku. The Kniha trieda implementuje toto rozhranie.
Pre tlačRozhranieMaliar stránok musí implementovať Pre tlač rozhranie. V tomto rozhraní je iba jedna metóda, print ().
PrinterGraphicsRozhranieThe Grafika objekt implementuje toto rozhranie. PrinterGraphics poskytuje getPrinterJob () metóda na získanie úlohy tlačiarne, ktorá vytvorila inštanciu procesu tlače.

Stránkovateľné rozhranie

The Stránkovateľné rozhranie obsahuje tri metódy:

Názov metódyPopis
int getNumberOfPages ()Vráti počet strán v dokumente.
PageFormat getPageFormat (int pageIndex)Vráti stránku PageFormat ako uvádza pageIndex.
Vytlačiteľné getPrintable (int pageIndex)Vráti hodnotu Pre tlač inštancia zodpovedná za vykreslenie stránky špecifikovanej používateľom pageIndex.

Rozhranie pre tlač

The Pre tlač rozhranie obsahuje jednu metódu a dve hodnoty:

názovTypPopis
int print (grafická grafika, PageFormat pageFormat, int pageIndex)Metóda

Vyžaduje, aby grafika spracovaná pomocou daného formátu stránky vykreslila zadanú stránku.

NO_SUCH_PAGEHodnotaToto je konštanta. Vráťte túto hodnotu, aby ste naznačili, že už nie sú k dispozícii ďalšie stránky na tlač.
PAGE_EXISTSHodnotaThe print () metóda sa vráti PAGE_EXISTS. Označuje, že stránka bola odovzdaná ako parameter print () bol vykreslený a existuje.

Každý maliar stránok musí implementovať Pre tlač rozhranie. Pretože je možné implementovať iba jednu metódu, vytváranie maliarov stránok sa môže javiť ako ľahké. Pamätajte však, že váš kód musí byť schopný vykresliť ľubovoľnú stránku v poradí alebo mimo neho.

Existujú tri parametre print (), počítajúc do toho Grafika, čo je rovnaká trieda, ktorá sa používa na kreslenie na obrazovku. Keďže Grafika trieda implementuje PrinterGraphic rozhranie, môžete získať PrinterJob ktorá vytvorila inštanciu tejto tlačovej úlohy. Ak je vaše rozloženie stránky zložité a vyžaduje niektoré pokročilé funkcie kreslenia, môžete cast Grafika parameter do a Graphics2D objekt. Potom budete mať prístup k úplnému Java 2D API.

Skôr ako začnete používať Grafika objekt, všimnite si, že súradnice nie sú preložené do ľavého horného rohu oblasti na tlač. Na obrázku 3 nájdete umiestnenie predvoleného pôvodu.

(0, 0) sa zobrazuje v ľavom hornom rohu okrajov tlačiarne. Ak chcete vytlačiť obdĺžnik 1 x 1 palec, 1 palec od horného a ľavého okraja, použili by ste nasledujúci kód:

1: public int print (Graphics graphics, PageFormat pageFormat, int pageIndex) {2: Graphics2D graphics2D = (Graphics2D) graphics; 3: Rectangle2D.Double rectangle = nový Rectangle2D.Double (); 4: rectangle.setRect (pageFormat.getImageableX () + 72, 5: pageFormat.getImageableY () + 72, 6: 72, 7: 72); 8: graphics2D.draw (obdĺžnik); 9: návrat (PAGE_EXISTS); }

Z predchádzajúceho príkladu vidíme, že musíme ručne preložiť pôvod obdĺžnika tak, aby sa tlačil v hornej časti tlačiteľnej oblasti ako na obrázku 1. Pre zjednodušenie kódu by sme mohli súradnice preložiť raz a použiť (0, 0 ) ako pôvod oblasti určenej na tlač. Úpravou predchádzajúceho príkladu získame:

1: public int print (Graphics graphics, PageFormat pageFormat, int pageIndex) {2: Graphics2D graphics2D = (Graphics2D) graphics; 3: graphics2D.translate (pageFormat.getImageableX (), pageFormat.getImageableY ()); 4: Rectangle2D.Double rectangle = nový Rectangle2D.Double (); 5: rectangle.setRect (72, 72, 72, 72); 6: graphics2D.draw (obdĺžnik); 7: návrat (PAGE_EXISTS); 8:}

Pomocou preložiť () metóda v riadku 3, môžeme preložiť súradnice a nastaviť náš počiatok (0, 0) v hornej časti tlačiteľnej oblasti. Od tohto okamihu sa náš kód zjednoduší.

PrinterGraphics rozhranie

The PrinterGraphics rozhranie sa skladá z jednej metódy:

Názov metódyPopis
PrinterJob getPrinterJob ()Vráti hodnotu PrinterJob pre túto požiadavku na vykreslenie a je implementovaná Grafika trieda

Trieda papiera

Osem metód tvorí Papier trieda:

Názov metódyPopis
double getHeight ()Táto metóda vráti fyzickú výšku stránky v bodoch (1 palec = 72 bodov). Napríklad ak tlačíte na stránku veľkosti písmena, návratová hodnota bude 792 bodov alebo 11 palcov.
double getImageableHeight ()Táto metóda vráti zobraziteľnú výšku stránky. Pozorovateľná výška je výška tlačenej oblasti, na ktorú môžete kresliť. Grafický pohľad na zobraziteľnú oblasť nájdete na obrázku 1.
double getImageableWidth ()Táto metóda vráti viditeľnú šírku stránky (šírku oblasti tlače, na ktorú môžete kresliť). Grafický pohľad na zobraziteľnú oblasť nájdete na obrázku 1.
double getImageableX ()Táto metóda vráti x začiatok zobraziteľnej oblasti. Pretože neexistuje podpora pre marže, návratová hodnota predstavuje ľavý okraj.
double getImageableY ()Táto metóda vráti pôvod y zobraziteľnej oblasti. Hodnota vrátená z tejto metódy je ekvivalentná hornému okraju.
double getWidth ()Táto metóda vráti fyzickú šírku stránky v bodoch. Ak tlačíte na papier veľkosti Letter, jeho šírka je 8,5 palca alebo 612 bodov.
void setImageableArea (double x, double y, double width, double height)Táto metóda nastavuje zobraziteľnú oblasť a určuje okraje na stránke. API v skutočnosti neposkytuje žiadnu metódu na explicitné nastavenie okrajov; musíte si ich vypočítať sami.
void setSize (dvojitá šírka, dvojitá výška)Táto metóda nastavuje fyzickú veľkosť stránky. Ak chcete definovať hárok s rozmermi 8,5 x 11 palcov, zadali by ste 612 a 792 bodov. Predvolená veľkosť je PÍSMENO.

Predtým, ako prejdeme k ďalšej časti, nezabudnite, že Papier trieda definuje fyzikálne vlastnosti stránky. The PageFormat trieda predstavuje všetky vlastnosti stránky, ako je orientácia stránky, veľkosť a typ papiera. Táto trieda sa vždy odovzdáva ako parameter do Pre tlač rozhrania print () metóda. Použite Papier na získanie zobraziteľného umiestnenia oblasti, veľkosti a orientácie stránky spolu s transformačnou maticou.

Trieda PageFormat

The PageFormat pozostáva z 12 metód:

Názov metódyPopis
double getHeight ()Táto metóda vráti fyzickú výšku stránky v bodoch (1 palec = 72 bodov). Ak má vaša stránka rozmery 8,5 x 11 palcov, návratná hodnota bude 792 bodov alebo 11 palcov.
double getImageableHeight ()Táto metóda vráti zobraziteľnú výšku stránky, čo je výška oblasti tlače, na ktorú môžete kresliť. Grafický pohľad na zobraziteľnú oblasť nájdete na obrázku 1.
double getImageableWidth ()Táto metóda vráti viditeľnú šírku stránky - šírku oblasti tlače, na ktorú môžete kresliť. Obrázok 1 zobrazuje grafické zobrazenie zobraziteľnej oblasti.
double getImageableX ()Táto metóda vráti x začiatok zobraziteľnej oblasti.
double getImageableY ()Táto metóda vráti pôvod y zobraziteľnej oblasti.
double getWidth ()Táto metóda vráti fyzickú šírku stránky v bodoch. Ak tlačíte na papier veľkosti Letter, šírka je 8,5 palca alebo 612 bodov.
double getHeight ()Táto metóda vráti fyzickú výšku stránky v bodoch. Napríklad papier veľkosti písmena má výšku 11 palcov alebo 792 bodov.
double [] getMatrix ()Táto metóda vracia transformačnú maticu, ktorá prevádza užívateľský priestor do požadovanej orientácie stránky. Návratová hodnota je vo formáte požadovanom AffineTransform konštruktér.
int getOrientation ()Táto metóda vráti orientáciu stránky buď ako jednu PORTRÉT alebo KRAJINA.
void setOrientation (int orientácia)Táto metóda nastavuje orientáciu stránky pomocou konštánt PORTRÉT a KRAJINA.
Papier getPaper ()Táto metóda vracia Papier objekt spojený s formátom stránky. V predchádzajúcej časti nájdete popis Papier trieda.
void setPaper (papierový papier)Táto metóda nastavuje Papier objekt, ktorý bude používať PageFormat trieda. PageFormat na dokončenie tejto úlohy musí mať prístup k fyzickým vlastnostiam stránky.

Týmto sa uzatvára popis tried stránok. Ďalšou triedou, ktorú budeme študovať, je PrinterJob.

PrinterJob trieda

The PrinterJob trieda riadi proces tlače. Môže vytvárať a riadiť tlačovú úlohu. Ďalej nájdete definíciu triedy:

Názov metódyPopis
zrušiť abstraktné neplatné ()Táto metóda zruší aktuálnu tlačovú úlohu. Zrušenie môžete potvrdiť pomocou isCancel () metóda.
abstract boolean isCancelled ()Táto metóda vráti hodnotu true, ak je úloha zrušená.
PageFormat defaultPage ()Táto metóda vráti predvolený formát stránky pre server PrinterJob.
abstraktná stránka PageFormat defaultPage (stránka PageFormat)Táto metóda klonuje PageFormat odovzdané v parametroch a upraví klon tak, aby sa vytvoril predvolený PageFormat.
abstract int getCopies ()Táto metóda vráti počet kópií, ktoré tlačová úloha vytlačí.
abstract void setCopies (int kópie)Táto metóda nastavuje počet kópií, ktoré bude úloha tlačiť. Upozorňujeme, že ak zobrazíte dialógové okno tlače, používatelia môžu zmeniť počet kópií (pozri pageDialog metóda).
abstraktný reťazec getJobName ()Táto metóda vráti názov úlohy.
statická PrinterJob getPrinterJob ()Táto metóda vytvorí a vráti nový PrinterJob.
abstraktný reťazec getUserName ()Táto metóda vráti užívateľské meno spojené s tlačovou úlohou.
abstraktná stránka PageFormat pageDialog (stránka PageFormat)Táto metóda zobrazuje dialógové okno, ktoré umožňuje používateľovi upraviť súbor PageFormat. The PageFormat, odovzdané v parametroch, nastaví polia dialógového okna. Ak užívateľ zruší dialógové okno, potom originál PageFormat budú vrátené. Ale ak užívateľ akceptuje parametre, potom nový PageFormat budú vytvorené a vrátené. Pretože nebude zobrazovať rovnaké parametre vo všetkých operačných systémoch, musíte byť pri používaní servera opatrní pageDialog.
abstract void setPageable (stránkovateľný dokument)Táto metóda zadá dopyt na dokument, aby sa získal celkový počet strán. The Stránkovateľné vráti aj PageFormat a Pre tlač objekt pre každú stránku. Pozri definíciu Stránkovateľné rozhranie pre viac informácií.
sada abstraktných prázdninTlačiteľné (maliar pre tlač)Táto metóda nastavuje Maliar objekt, ktorý vykreslí stránky určené na tlač. A Maliar objekt je objekt, ktorý implementuje Pre tlač trieda a jej print () metóda.
abstract void setPrintable (maliar pre tlač, formát PageFormat)Táto metóda plní rovnaké úlohy ako program sada abstraktných prázdninTlačiteľné (maliar pre tlač), okrem toho, že dodávate PageFormat že Maliar bude používať. Ako je uvedené v definícii Pre tlač rozhranie, print () metóda vyhovuje a PageFormat objekt ako prvý parameter.
abstraktná neplatná tlač ()Táto metóda vytlačí dokument. V skutočnosti sa volá print () metóda Maliar predtým priradené k tejto tlačovej úlohe.
abstract void setJobName (reťazec jobName)Táto metóda nastavuje názov tlačovej úlohy.
abstract boolean printDialog ()Táto metóda zobrazuje dialógové okno tlače, ktoré umožňuje používateľovi zmeniť parametre tlače. Výsledok tejto interakcie sa nevráti do vášho programu. Namiesto toho sa odošle do rovnocenného operačného systému.
abstraktná stránka PageFormat validatePage (stránka PageFormat)Táto metóda overí PageFormat odovzdané v parametroch. Ak tlačiareň nemôže používať PageFormat ktorý ste dodali, potom sa vráti nový, ktorý vyhovuje tlačiarni.

Knižná trieda

Sedem metód tvorí Kniha trieda:

>

Názov metódyPopis
void append (Maliar pre tlač, stránka PageFormat)Táto metóda pripojí stránku k Kniha. The maliar a PageFormat pre túto stránku sú odovzdané v parametroch.
void append (Maliar pre tlač, stránka PageFormat, int numPages)Táto metóda plní rovnaké úlohy ako program void append (Maliar pre tlač, stránka PageFormat)okrem toho, že určíte počet strán.
int getNumberOfPages ()Táto metóda vráti počet stránok, ktoré sa v súčasnosti nachádzajú v serveri Kniha.
PageFormat getPageFormat (int pageIndex)Táto metóda vracia PageFormat objekt pre danú stránku.
Vytlačiteľné getPrintable (int pageIndex)Táto metóda vracia maliar pre danú stránku.
void setPage (int pageIndex, maliar pre tlač, stránka PageFormat)Táto metóda nastavuje maliar a PageFormat pre danú stránku už v knihe.

Recept na tlač

Recept na tlač je veľmi jednoduchý. Najskôr vytvorte a PrinterJob objekt:

PrinterJob printJob = PrinterJob.getPrinterJob ();

Ďalej pomocou setPrintable () metóda PrinterJob, priradiť Maliar namietať proti PrinterJob. Všimnite si, že a Maliar objekt je taký, ktorý implementuje Pre tlač rozhranie.

printJob.setPrintable (Maliar);

Alebo môžete nastaviť PageFormat spolu s Maliar :

printJob.setPrintable (Painter, pageFormat);

Nakoniec Maliar objekt musí implementovať print () metóda:

verejná int tlač (Grafika g, PageFormat pageFormat, int stránka)

Prvým parametrom je grafická rukoväť, ktorú použijete na vykreslenie stránky, pageFormat je formát, ktorý sa použije pre aktuálnu stránku, a posledným parametrom je číslo stránky, ktoré sa musí vykresliť.

To je všetko - k jednoduchej tlači teda.

Úvod do rámca

Rámec tlače, ktorý postavíme v tejto sérii, bude úplne nezávislý od rozhrania API tlače Java. Umožní to väčšiu flexibilitu pri vytváraní rôznych výstupov.Jeho štruktúra vám umožní vytvárať dokumenty, stránky a tlačiť objekty. Počas pridávania stránok do dokumentu budete môcť na stránku pridávať tlačené objekty. Pomocou tejto štruktúry budete môcť ľahko implementovať funkcie exportu do súborov PDF alebo HTML alebo tlačiť priamo na tlačiarni pomocou tlačového rozhrania API. Hlavným cieľom rámca je ale zjednodušenie vytvárania tlačených dokumentov. Pri tlači pomocou tlačového rozhrania API získate iba grafické plátno, na ktoré sa dá kresliť. Nerieši koncepty odsekov, obrázkov, kresieb, grafiky, tabuliek alebo spustených hlavičiek a päty. Pretože musíte vypočítať pôvod (x, y), šírku a výšku tlačiteľnej oblasti, nastavenie okrajov je práca. Náš rámec tlače bude riešiť všetky tieto slabosti.

Záver

V tejto prvej časti sme pokryli veľa pôdy. Pozreli sme sa na jednotky merania, štruktúru stránky, dva modely vykreslenia (Stránkovateľné a Pre tlač) a Knihya uzavreli sme podrobným vysvetlením tlačového API. Budúci mesiac sa zameriame predovšetkým na kód, pretože všetko uvedieme do praxe. Taktiež sa pozrieme na problémy, ktoré vznikajú pri tlači na viacerých platformách. V súvislosti s časťou 3 podrobne vysvetlím návrh a implementáciu rámca.

Jean-Pierre Dube je nezávislý konzultant v odbore Java. Spoločnosť Infocom založil v roku 1988. Od tej doby vyvinula spoločnosť Infocom aplikácie na zákazku v oblastiach, ako je výroba, správa dokumentov a rozsiahla správa elektrických vedení. Jean-Pierre má rozsiahle skúsenosti s programovaním v jazykoch C, Visual Basic a Java; druhý je teraz primárnym jazykom pre všetky nové projekty. Túto sériu venuje svojej matke, ktorá zomrela pri písaní tohto článku.

Získajte viac informácií o tejto téme

  • „Printing in Java,“ Jean-Pierre Dubé (JavaWorld)
  • Časť 1: Oboznámte sa s tlačovým modelom Java (20. októbra 2000)
  • Časť 2: Vytlačte svoju prvú stránku a vykreslite zložité dokumenty (1. decembra 2000)
  • Časť 3: Jean-Pierre Dubé predstavuje tlačový rámec, ktorý funguje nad rozhraním Java Print API (5. januára 2001)
  • Časť 4: Kódujte rámec tlače
  • (2. februára 2001)
  • Časť 5: Objavte triedy podpory rámca tlače
  • (2. marca 2001)
  • Nájdete veľa kníh pokrývajúcich Java AWT, ale žiadna nebude pokrývať túto tému v rozsahu tejto knihy. Ak píšete grafické používateľské rozhrania, musíte mať túto knihu vedľa počítača: Graphic Java 2, Mastering The JFCAWT, zväzok 1, David M. Geary (Prentice Hall, 1998)

    //www.amazon.com/exec/obidos/ASIN/0130796662/javaworld

  • Táto kniha bola užitočná, keď vyšla verzia Java 1.1, a bola prvou, ktorá hovorila o tlači v prostredí Java: Migrácia z Java 1.0 na Java 1.1, Daniel I. Joshi a Pavel A. Vorobiev (Ventana Communications Group, 1997)

    //www.amazon.com/exec/obidos/ASIN/1566046866/javaworld

  • Táto kniha, ktorá je pravdepodobne najlepšou knihou v prostredí Java 2D, pokrýva všetky aspekty 2D API a tiež poskytuje Grafika rámec pre pokročilé 2D kompozície: Grafika Java 2D API, Vincent J. Hardy (Prentice Hall, 1999)

    //www.amazon.com/exec/obidos/ASIN/0130142662/javaworld

  • Vynikajúci úvod do Java 2D API „Začíname s Java 2D“, Bill Day (JavaWorld, Júla 1998)

    //www.javaworld.com/javaworld/jw-07-1998/jw-07-media.html

Tento príbeh, „Printing in Java, Part 1“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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