
Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.
Das Paket javax.print enthält Klassen und Interfaces, um Druckdienste (PrintService) anhand ihrer Fähigkeiten zu ermitteln, Druckformate (DocFlavor) zu definieren, Druckaufträge (DocPrintJob) zu erzeugen und Text, Bilder oder 2D-Grafiken in Form von Dokumenten (Doc) an den Drucker zu senden.
Ein PrintService repräsentiert praktisch einen Drucker als Ausgabegerät. Die Klasse DocFlavor spezifiziert das Format der zu druckenden Daten, z. B. Postscript, PDF oder reinen ASCII-Text. Mit Hilfe eines DocPrintJob werden die Daten schließlich an den Drucker geschickt.
Druckaufträge können mit Hilfe der Attribute aus den Paketen javax.print.attribute und javax.print.attribute.standard konfiguriert werden. Mit diesen Attributen lassen sich eine Vielzahl von Einstellungen vornehmen, z. B. welcher Papierschacht benutzt werden soll, die Anzahl der Kopien, Farb- oder Monochromdruck, Duplexdruck oder einseitiges Drucken, Druckqualität, etc.
Diese Attribute können auch dazu benutzt werden, einen passenden PrintService zu ermitteln, der die Angaben verarbeiten kann. So können z. B. aus allen verfügbaren Druckern diejenigen herausgesucht werden, die duplex und farbig drucken können.
Die Attribute, die laut API zur Verfügung stehen, entsprechen denen, die im Industriestandard durch das Internet Printing Protocol (IPP) spezifiziert sind.
Die nachfolgenden sechs Arbeitsschritte zeigen, wie typischerweise ein Dokument mit JPS gedruckt wird:
Während Text- und Bilddokumente generell nur über einen Druckauftrag vom Typ DocPrintJob gedruckt werden können, gibt es für 2D-Grafiken noch eine Alternative: Hier kann auch weiterhin die aus dem AWT Java Printing bekannte Klasse java.awt.PrinterJob genutzt werden. Die Klasse PrinterJob wurde um entsprechende Methoden erweitert, damit die neuen Features des JPS (Ermitteln von Druckdiensten, Verarbeitung von Attributen, etc.) auch in der "alten" Klasse genutzt werden können.
Damit hat SUN die alte und neue Drucktechnologie so miteinander verbunden, dass der Entwickler beim Einsatz von JPS weiterhin auf die bereits bekannten und bewährten Möglichkeiten der AWT Java Printing API zurückgreifen kann.
Die JPS API unterstützt auch das Streaming von Dokumenten, d. h. die Daten werden nicht ausgedruckt, sondern über einen Druckdienst vom Typ StreamPrintService in ein bestimmtes Format umgewandelt, z. B. GIF zu Postscript oder Text zu PDF. Das konvertierte Dokument wird dann über einen Output-Stream in eine Datei geschrieben.
Einen StreamPrintService erhält man dabei über eine StreamPrintServiceFactory, die man ebenfalls über einen Lookup-Mechanismus ermitteln kann. Hierbei sind zwei Informationen anzugeben: das zu verarbeitende Datenformat (z. B. DocFlavor.INPUT_STREAM.GIF) und das Zielformat als MIME-Typ, z. B. application/postscript.
| |
| Abb. 1: Einfaches Beispiel mit den grundlegenden Schritten, um eine Textdatei mit JPS zu drucken. |
Die neue Java Print Service API ist eine echte Bereicherung - oder besser Erleichterung - bei der Umsetzung einer Drucklösung in Java.
JPS bietet zwar weiterhin keine Funktionalität, um Reports im eigentlichen Sinne zu erzeugen, aber insbesondere das Ermitteln von Druckern mit bestimmten Eigenschaften, die (erweiterbaren) Attributklassen basierend auf dem IPP-Standard und die Unabhängigkeit von Grafik- bzw. AWT-Objekten verhelfen dem Thema "Drucken in Java" langsam aus den Kinderschuhen.
Ingo Vogt (info@ordix.de).