![]() |
|
|
Mit getPageResolution() bekommen wir Auflösungen von typischerweise 300 oder 600 Pixeln. Der Rückgabewert von getPageDimension() liefert ein Dimension-Objekt mit den Ausmaßen der Seite, also Höhe oder Breite. Die Einträge liefern die Anzahl der druckbaren Pixel (keine Inches) pro Seite. Mit folgenden Zeilen erfragen wir die Auflösung: Listing 14.27 print/PrinterInfo.java package print; import java.awt.*; class PrinterInfo { public static void main( String args[] ) { Toolkit tk = Toolkit.getDefaultToolkit(); PrintJob pj = tk.getPrintJob( new Frame(), "", null ); if ( pj != null ) { int resolution = pj.getPageResolution(); Dimension d = pj.getPageDimension(); System.out.println( "Resolution : " + resolution + "\n" + "Width : " + d.width + "\n" + "Height : " + d.height + "\n" + "Pixel on page : " + (resolution * d.width * d.height) ); } System.exit( 0 ); } } Für meinen Drucker ergeben sich folgende Werte: Resolution : 72 Width : 595 Height : 842 Pixel on page : 36071280 14.13.3 Drucken der Inhalte
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
abstract class java.awt. PrintJob |
| abstract Graphics getGraphics() Liefert ein Graphics für eine Seite. |
| abstract void end() Beendet den Druck und gibt Ressourcen frei. |
Bisher haben wir mit getGraphics() einen Kontext bekommen und selbstständig die Elemente gezeichnet. Doch was machen wir, wenn Standardkomponenten wie Schaltflächen oder Textfelder gedruckt werden sollen? Für diese Aufgabe bietet jede Komponente über die Oberklasse Component entweder print() oder printAll() an.
abstract class java.awt. Component implements ImageObserver, MenuContainer, Serializable |
| void print( Graphics g ) Druckt alle Komponenten. Die Unterklassen überschreiben diese Methode. |
| void printAll( Graphics g ) Druckt alle Komponenten und Unterkomponenten. Die Unterklassen überschreiben diese Methode. |
Diese Methoden werden auf dem Graphics-Objekt des Druckers aufgerufen.
Da Container ihre Kinder selbstständig verwalten, gibt es auch hier eine Druckfunktion. Sie heißt printComponents() und druckt alle Komponenten im Container. Sie kann jedoch nur das ausgeben, was tatsächlich sichtbar ist.
Falls wir ein Fenster mit allen Elementen zu Papier bringen wollen, schreiben wir:
Toolkit tk = Toolkit.getDefaultToolkit(); PrintJob pj = tk.getPrintJob( new Frame(), "", null ); if ( pj != null ) { Graphics g = pj.getGraphics(); f.printComponents( g ); g.dispose(); pj.end(); }
Es ist natürlich immer aufwändig, für einen einfachen 10cpi-Text ein Printer-Objekt und dann all den Text als Grafik zu erzeugen. Dies braucht nicht nur lange, sondern ist auch sehr umständlich. Um einen Drucker am Parallelport oder im Netzwerk direkt anzusprechen, konstruieren wir einfach ein FileOutputStream wie folgt:
FileOutputStream fos = new FileOutputStream( "PRN:" ); PrintWriter pw = new PrintWriter( fos ); pw.println( "Hier bin ich" ); pw.close();
Hängt dann am Printer-Port ein Drucker, so schreiben wir den Text in den Datenstrom. An Stelle von PRN: funktioniert auch LTP1: beziehungsweise auch ein Druckername im Netzwerk. Unter Unix kann entsprechend /dev/lp verwendet werden.
Natürlich sehen wir auf den ersten Blick, dass dies eine Windows- beziehungsweise DOS-Version ist. Um das Ganze auch systemunabhängig zu steuern, entwickelte Sun die Communications API. Obwohl sie in erster Linie für die serielle Schnittstelle gedacht ist, unterstützt sie auch die parallele Schnittstelle. Hier bietet sich auch die Chance, den Zugriff zu synchronisieren.
Die am System bekannten Drucker sind in der Zentrale PrintService angemeldet. Dort lassen sich auch erfragen:
for ( PrintService s : PrintServiceLookup.lookupPrintServices( null, null ) ) System.out.println( s.getName() );
| << zurück |
Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.