import java.awt.Robot;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import java.awt.GraphicsEnvironment;
import javax.print.ServiceUI;
import javax.print.DocPrintJob;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.Doc;
import javax.print.SimpleDoc;
/*****************************************************************************************************************************
* Methode druckt den übergebenen Container aus
* @param container Container
* @param devicePosition int
* @return boolean
****************************************************************************************************************************/
public static boolean printContainer(java.awt.Container container, int devicePosition)
{
if(container == null)
return false;
try{
Robot robi = new Robot();
BufferedImage bImg = robi.createScreenCapture(container.getBounds());
ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
ImageIO.write(bImg,"png",tmpOut);
ByteArrayInputStream tmpIn = new ByteArrayInputStream(tmpOut.toByteArray());
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
//setzt das auszudruckend Dokument fest
DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG; //hier nachsehen, welches man benötigt!
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = null;
//wenn als Device -1 übergeben wird, wird ein Dialog für das drucken auswählen ausgegeben!
if (devicePosition == -1)
{
service = ServiceUI.printDialog(GraphicsEnvironment.
getLocalGraphicsEnvironment().
getDefaultScreenDevice().
getDefaultConfiguration(), 200, 200,
printService, defaultService, flavor, pras);
}
//ansonsten wird der 1te (Standard/Default) Drucker genommen
else
{
//wenn es keine Drucker gibt und das Device niedriger ist als die Länge
if (printService != null && printService.length != 0 && printService.length > devicePosition)
service = printService[devicePosition];
//ansonsten standarddevice
else if(printService != null && printService.length != 0)
service = printService[0];
}
//wenn der Service nicht null ist, wird ausgedruckt
if (service != null)
{
DocPrintJob job = service.createPrintJob();
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(tmpIn, flavor, das);
job.print(doc, pras);
return true;
}
return false;
}
catch(Exception ex)
{
ex.printStackTrace(System.out);
return false;
}
}