2D Graphics Java Tutorial

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Array;
import javax.print.DocFlavor;
import javax.print.StreamPrintService;
import javax.print.StreamPrintServiceFactory;
import javax.print.attribute.Attribute;
public class Main {
  public static void main(String[] argv) throws Exception {
    OutputStream fos = new BufferedOutputStream(new FileOutputStream("filename.ps"));
    DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
    StreamPrintServiceFactory[] factories = StreamPrintServiceFactory
        .lookupStreamPrintServiceFactories(flavor, DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType());
    StreamPrintService service = factories[0].getPrintService(fos);
    Class[] cats = service.getSupportedAttributeCategories();
    for (int j = 0; j < cats.length; j++) {
      Attribute attr = (Attribute) service.getDefaultAttributeValue(cats[j]);
      if (attr != null) {
        String attrName = attr.getName();
        String attrValue = attr.toString();
        Object o = service.getSupportedAttributeValues(attr.getCategory(), null, null);
        if (o.getClass().isArray()) {
          for (int k = 0; k < Array.getLength(o); k++) {
            Object o2 = Array.get(o, k);
            System.out.println(o2);
          }
        }
      }
    }
  }
}