package cc.glsn.v15.print; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.Socket; import java.util.LinkedList; import javax.imageio.ImageIO; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.SimpleDoc; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.JobName; import javax.print.attribute.standard.MediaPrintableArea; import javax.print.attribute.standard.MediaSizeName; import cc.glsn.SerialChunk; public class PrintServer { public static void main(String[] args) throws Exception { String TargetHost=args[0]; new PrintServer(TargetHost); } PrintService myPS; MediaPrintableArea Area; public PrintServer(String TargetHost) throws Exception { printsetup(); Socket S=new Socket(TargetHost,Globals.ServerPort); while(true) { PrintMessageReqJob M=new PrintMessageReqJob(); SerialChunk.writeSerialObject(S.getOutputStream(),M); PrintMessagePushJob P=(PrintMessagePushJob)SerialChunk.readSerialObject(S.getInputStream()); System.out.println("Got job: " + P.Req.toString()); print(P.Req); PrintMessageAck A=new PrintMessageAck(); SerialChunk.writeSerialObject(S.getOutputStream(),A); } } private void printsetup() { myPS=PrintServiceLookup.lookupDefaultPrintService(); System.out.println("Selected: " + myPS.getName()); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(MediaSizeName.NA_LETTER); Object O=myPS.getSupportedAttributeValues(MediaPrintableArea.class,null,aset); System.out.println(O.getClass().getName()); Area=null; MediaPrintableArea[] M=(MediaPrintableArea[])O; for(int i=0; i Pages=IC.getImages(); String JobName="f.cpp"; int Pn=0; for(BufferedImage BI : Pages) { Pn++; PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(MediaSizeName.NA_LETTER); aset.add(new JobName(JobName + " - Page " + Pn , null)); aset.add(Area); ByteArrayOutputStream Out=new ByteArrayOutputStream(); ImageIO.write(BI,"PNG",Out); System.out.println("Page " + Pn + " Sz: " + Out.size()); ByteArrayInputStream In=new ByteArrayInputStream(Out.toByteArray()); SimpleDoc SD=new SimpleDoc(In,Flav,null); DocPrintJob Job=myPS.createPrintJob(); Job.print(SD,aset); } } }