Das nachfolgende Package ist frei verfügbar solange es nicht kommerziell verwendet wird! Falls es so wie veröffentlicht, in Teilen oder abgewandelt zum Einsatz kommt, würde ich mich sehr über eine kurze E-Mail freuen.
Mit dem in diesem Package enthaltendem Dialog lassen sich beliebig viele Image-Objekt auf einer druckfähigen Seite positionieren und ausdrucken. Dabei kann jedes Image für sich individuell mit der Mouse und über Eingabefelder in seiner Größe und Positionierung modifiziert werden. Darüberhinaus kann die Vorschau verkleinert und gezoomt werden.
Zusätztlich können auch Textfelder (z.B. für Überschriften) definiert, positioniert und modifiziert werden
Vor dem Ausdruck können über die entsprechenden Systemdialoge sowohl das Seitenformat als auch der Drucker ausgewählt werden.
Beschreibung:
Grundlagen zum Drucken in Java:
- Printable:
Das Interface Printable ist in dem Paket java.awt.print definiert und stellt dem Entwickler nur eine einzige Methode zur Verfügung:
public int print(Graphics g, PageFormat pageFormat, int PageIndex)
Diese Methode wird von dem aktuellen Druckauftrag genutzt um einzelne Seiten auszudrucken. Über die Graphics und PageFormat Objekte erhält die Applikation alle benötigten Informationen und Werkzeuge um die eigenen Inhalte auf die Seite zu bringen. Über die pageIndex Variable kann die Applikation entscheiden, wieviele Seiten gedruckt werden sollen. Solange noch Daten zu drucken sind, wird am Ende der Methode PAGE_EXISTS zurückgeliefert. Erst wenn ein Seitenindex übergeben wird, für den keine Inhalte mehr zur Verfügung stehen wird NO_SUCH_PAGE zurückgeliefert.
public class CPrintablePage implementsPrintable { public int print(Graphics g, PageFormat pageFormat, int PageIndex) throwsPrinterException { int l_Result = NO_SUCH_PAGE; if(pageIndex < 3) {
g.drawString("Hello World");
l_Result = PAGE_EXISTS; } } }
Das obige Beispiel druckt drei Seiten mit "Hello World" aus. Beendet wird der Druck, wenn der Seiten-Index größer drei wird und die Applikation dann NO_SUCH_PAGE zurückliefert.
- PrinterJob:
Das Java-Package java.awt.print enthält die Klasse PrinterJob, die sich sehr gut zur Druckersteuerung eignet. Sie wird wie folgt initalisiert:
Ein von dem Interface Printable abgeleitete Klasse kann mittels setPrintable an die PrinterJob-Klasse übergeben werden und dann mittels der Methode print gedruckt werden kann:
public void setPrintable(Printable painter)
public void setPrintable(Printable painter, Pageformat format)
Für das Seitenformat kann der Methode setPrintable zusätzlich auch die Klasse PageFormat übergeben werden. PageFormat definiert z.B. die Seitengröße, Seitenausrichtung, etc. Mit der Methode defaultPage kann aus PrinterJob-Instance die Default-Einstellungen der aktuellen Druckseite ermittelt werden. Mit pageDialog wird ein System-Dialog aufgerufen, indem die Seiteneinstellungen modifiziert werden können:
An PrintImageDialog kann die von ArrayList abgeleitete Klasse CPrintImages übergeben werden. Diese kann eine beliebige Anzahl von Image-Objekten und Textblöcken enthalten. CPrintImages enthält eine Liste von der Klasse CPrintImage abgeleiteten Objekten. Von CPrintImage sind die Klassen:
CPrintGrafik
(zur Darstellung von Image-Objekten)
CPrintGrafikText
(zur Darstellung von Textzeilen)
abgeleitet. Diese Klassen können beliebig in der Klasse CPrintImages zusammengestellt und an PrintImageDialog zur Voransicht und zum Ausdruck übergeben werden.
Die Werte der von CPrintImage abgeleiteten Klassen können mit dem Package IniFile in einem INI-File gesichert werden. Dazu stellt CPrintImage die Methode setIniFileSection zur Verfügung, an das eine CIniFileSection-Klasse übergeben werden kann. Die einzelnen Keys sind fest definiert und werden im Abschnitt Methoden beschrieben. Nach der Modifizierung im Dialog können die Werte über die Methode setValuesToIniFile der Klasse CPrintImages an die Klasse CIniFile übergeben werden.
Methoden:
Die Klasse CPrintImages:
Enthält eine Liste der im Dialog CPrintImageDialog dazustellenden Objekte. Diese Objekte werden durch die Klasse CPrintImage representiert, die mittels der Methode add in der Liste aufgenmmen werden:
public void add(CPrintImage PrintImage)
Die Klasse CPrintImage:
Representiert ein im Dialog CPrintImageDialog dazustellendes Objekt (Listenelement in CPrintImages). Von dieser Klasse sind CPrintGrafik (für Image-Objekte) und CPrintGrafikText (für Textzeilen) abgeleitet:
public CPrintGrafik(String label, Image image, int XPos, int YPos)
public CPrintGrafikText(String label, String Text, int XPos, int YPos)
Der Dialog CPrintImageDialog:
Der Dialog CPrintImageDialog wird mittels des folgenden Konstruktors initalisiert und gestartet:
public CPrintImageDialog(Frame owner, String Titel, CPrintImages PrintImages, double Zoom)
Speicherung der im Dialog-Werte im INI-File:
Die Werte der von CPrintImage abgeleiteten Klassen können mit dem Package IniFile in einem INI-File gesichert werden. Dazu stellt CPrintImage die Methode setIniFileSection zur Verfügung, an das eine CIniFileSection-Klasse übergeben werden kann:
public void setIniFileSection(CIniFileSection IniFileSection)
Nach Beendigung des Dialogs CPrintImageDialog können die Werte über die Methode setValuesToIniFile der Klasse CPrintImages an die Klasse CIniFile übergeben werden:
public void setValuesToIniFile()
Die Key-Words innerhalb der Sektionen sind für die abgeleitenden Objekte wie folgt definiert:
CPrintGrafik:
CPrintGrafikText:
Visible
Visible
X-Pos
X-Pos
Y-Pos
Y-Pos
X-Scale
X-Scale
Y-Scale
Y-Scale
Font-Name
Font-Size
Bold
Italic
Beispiel:
Das Beispiel entspricht dem obrigen Screen-Shot. Die Startwerte der dazustellenden Objekte werden aus einem INI-File gelesen. Nach Beendigung des Dialog CPrintImageDialog werden eventuelle Änderungen gesichet: