Drucken in JAVA

Transcription

Drucken in JAVA
Drucken in JAVA
12-Drucken
Probleme
beim Drucken:
•Es können nur graphische Informationen gedruckt werden.
•Die zu druckende Information muss graphisch aufbereitet werden.
•Größe und Auflösung unterscheiden zwischen Bildschirm und
verschiedenen Druckern stark:
•Bildschirm: 72-100 dpi
•Drucker: 200-1200 dpi
•Photosatz: >1200 dpi
Es muss eine Anpassung vorgenommen werden
•Wegen der unterschiedlichen Papiergrößen sind nicht alle Formate
möglich.
•Die Nutzung der Drucker ist sehr stark von der Hard- und
Softwareumgebung abhängig.
12-Drucken
2
Drucken in JAVA
1.
2.
3.
4.
Das zu druckende Objekt muss das Interface Printable oder Pageable
implementieren.
Es muss ein PrinterJob erzeugt werden.
Es müssen die notwendigen Einstellungen vorgenommen werden
(Seitengröße, Orientierung...).
Der Ausdruck muss gestartet werden.
12-Drucken
3
Das Interface Printable
Das
Interface Printable beschreibt Ausgaben, die auf einer Seite gemacht
werden.
public int print(Graphics graphics,
PageFormat pageFormat, int pageIndex) throws
PrinterException
Diese Methode muss implementiert werden.
•graphics: Graphikkontext der auszugebenden Seite
•pageFormat: beschreibt das Format der auszugebenden Seite
•pageIndex: Nummer der auszugebenden Seite
Die Methode print(...) erfüllt die gleiche Funktion, wie paintComponent für
die Ausgabe auf den Bildschirm.
Man kann print genau so implementieren, wie paintComponent
In EMMA301Paint sollen alle graphischen Objekte druckbar sein.
Erweiterung des Interfaces GraphicalObject und der absrakten Klasse
AbstractGraphicalObject.
12-Drucken
4
public interface GraphicalObject extends Printable
{ ... }
public abstract class AbstractGraphicalObject
implements GraphicalObject { ...
public int print(Graphics g, PageFormat pageFormat,
int pageIndex) {
double scale =
Math.min(pageFormat.getImageableWidth()/bounds2D.getWidth(),
pageFormat.getImageableHeight()/bounds2D.getHeight());
scale=scale>1.0?1.0:scale;
((Graphics2D)g).translate
(pageFormat.getImageableX(), pageFormat.getImageableY());
((Graphics2D)g).scale(scale, scale);
paint((Graphics2D)g);
return Printable.PAGE_EXISTS;
}
}
12-Drucken
5
Die Klasse PrinterJob
Die
Klasse PrinterJob beschreibt einen vollständigen Druckvorgang
und ermöglicht die Auswahl der Seitenformate, des Druckers u.s.w.
Ein Objekt der Klasse PrinterJob muss mit der Methode
public static PrinterJob getPrinterJob()
erzeugt werden, da die Klasse selbst abstrakt ist.
public PageFormat pageDialog(PageFormat page)
öffnet einen Dialog zur Auswahl des Seitenformates
public boolean printDialog()
öffnet einen Dialog zur Auswahl des Druckers. Liefert true, wenn mit ok
beendet wird sonst false.
12-Drucken
6
public
void setPrintable(Printable painter,
PageFormat format)
setzt das zu druckende Printable-Objekt und das zu verwendende
Seitenformat.
public void setPageable(Pageable document) throws
NullPointerException
setzt das zu druckende (mehrseitige Dokument)
public void print() throws PrinterException
startet die Ausgabe
12-Drucken
7
try
{
PrinterJob printerJob = PrinterJob.getPrinterJob();
activePageFormat=printerJob.pageDialog(activePageFormat);
printerJob.setPrintable(
((EMMA301PaintFrame)desktopPane.getSelectedFrame()).
getPicture() ,activePageFormat);
if (printerJob.printDialog()) printerJob.print();
}
catch (PrinterException pe) {}
12-Drucken
8
Interface Pageable
Das
Interface Pageable dient der Ausgabe mehrseitiger Dokumente,
wobei jede Seite ein anderes Seitenformat haben kann.
public Printable getPrintable(int pageIndex) throws
IndexOutOfBoundsException
ist die wesentliche zu implementierende Methode. Sie liefert für die Seite
Nummer pageIndex die zu druckende Seite.
12-Drucken
9
Klasse Book
Die
Klasse Book ist eine reale Implementierung des Interfaces Pageable.
Sie dient der Verwaltung mehrseitiger Dokumente.
public void append(Printable painter, PageFormat page)
fügt eine Seite zu dem Buch hinzu
12-Drucken
10