# javax.print.attribute

***

**1. Creating a Print Service Lookup with Attributes**

```java
import javax.print.PrintServiceLookup;
import javax.print.attribute.standard.PrinterState;

public class PrintServiceLookupWithAttributes {

    public static void main(String[] args) {
        // Create a Print Service Lookup with the desired attributes
        PrintServiceLookup lookup = PrintServiceLookup.lookupPrintServices(
                null,  // Document format is not specified
                new PrinterState[] { PrinterState.ACTIVE }  // Printer must be active
        );
    }
}
```

**2. Getting Print Job Attributes**

```java
import javax.print.PrintJob;
import javax.print.attribute.PrintJobAttribute;

public class GetPrintJobAttributes {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Get the attributes of the print job
        PrintJobAttribute[] attributes = printJob.getAttributes();
    }
}
```

**3. Setting Print Job Attributes**

```java
import javax.print.PrintJob;
import javax.print.attribute.Attribute;
import javax.print.attribute.AttributeSet;
import javax.print.attribute.PrintJobAttributeSet;

public class SetPrintJobAttributes {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Create a new attribute set with the desired attributes
        Attribute[] attributes = ...
        AttributeSet attributeSet = new PrintJobAttributeSet(attributes);

        // Set the attributes on the print job
        printJob.print(attributeSet, ...);
    }
}
```

**4. Listing Available Print Services**

```java
import javax.print.PrintService;
import javax.print.PrintServiceLookup;

public class ListPrintServices {

    public static void main(String[] args) {
        // Create a Print Service Lookup
        PrintServiceLookup lookup = PrintServiceLookup.lookupPrintServices(
                null,  // Document format is not specified
                null   // No attributes are specified
        );

        // Get the print services
        PrintService[] printServices = lookup.getPrintServices();

        // Print the names of the print services
        for (PrintService printService : printServices) {
            System.out.println(printService.getName());
        }
    }
}
```

**5. Creating a Print Request with Attributes**

```java
import javax.print.PrintRequestAttributeSet;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.standard.MediaPrintableArea;

public class CreatePrintRequestWithAttributes {

    public static void main(String[] args) {
        // Create a Print Service Lookup
        PrintServiceLookup lookup = PrintServiceLookup.lookupDefaultPrintService();

        // Create a Print Request Attribute Set with the desired attributes
        PrintRequestAttributeSet attributes = new PrintRequestAttributeSet();
        attributes.add(new MediaPrintableArea(0, 0, 8, 11, MediaPrintableArea.INCH));

        // Create a Print Request
        PrintService printService = lookup.getDefaultPrintService();
        printService.createPrintJob(...);
    }
}
```

**6. Getting Print Service Attributes**

```java
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.PrintServiceAttribute;

public class GetPrintServiceAttributes {

    public static void main(String[] args) {
        // Create a Print Service Lookup
        PrintServiceLookup lookup = PrintServiceLookup.lookupPrintServices(
                null,  // Document format is not specified
                null   // No attributes are specified
        );

        // Get the print services
        PrintService[] printServices = lookup.getPrintServices();

        // Print the attributes of each print service
        for (PrintService printService : printServices) {
            PrintServiceAttribute[] attributes = printService.getAttributes();
            for (PrintServiceAttribute attribute : attributes) {
                System.out.println(attribute.getName() + ": " + attribute.getValue());
            }
        }
    }
}
```

**7. Matching Print Service Attributes**

```java
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.Attribute;
import javax.print.attribute.AttributeSet;

public class MatchPrintServiceAttributes {

    public static void main(String[] args) {
        // Create a Print Service Lookup
        PrintServiceLookup lookup = PrintServiceLookup.lookupDefaultPrintService();

        // Create an Attribute Set with the desired attributes
        Attribute[] attributes = ...
        AttributeSet attributeSet = new PrintServiceAttributeSet(attributes);

        // Find a Print Service that matches the attributes
        PrintService printService = lookup.getPrintService(attributeSet);
    }
}
```

**8. Printing a Document with Attributes**

```java
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.PrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.PrintRequestAttributeSet;

public class PrintDocumentWithAttributes {

    public static void main(String[] args) {
        // Create a Print Service Lookup
        PrintServiceLookup lookup = PrintServiceLookup.lookupDefaultPrintService();

        // Create a Print Request Attribute Set with the desired attributes
        PrintRequestAttributeSet attributes = new PrintRequestAttributeSet();
        attributes.add(...);

        // Create a Print Job
        PrintService printService = lookup.getDefaultPrintService();
        PrintJob printJob = printService.createPrintJob();

        // Print the document
        printJob.print(new Doc(...), attributes);
    }
}
```

**9. Cancelling a Print Job**

```java
import javax.print.PrintJob;

public class CancelPrintJob {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Cancel the print job
        printJob.cancel();
    }
}
```

**10. Restarting a Print Job**

```java
import javax.print.PrintJob;

public class RestartPrintJob {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Restart the print job
        printJob.restart();
    }
}
```

**11. Holding a Print Job**

```java
import javax.print.PrintJob;

public class HoldPrintJob {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Hold the print job
        printJob.hold();
    }
}
```

**12. Releasing a Print Job**

```java
import javax.print.PrintJob;

public class ReleasePrintJob {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Release the print job
        printJob.release();
    }
}
```

**13. Setting Print Job Name**

```java
import javax.print.PrintJob;

public class SetPrintJobName {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Set the print job name
        printJob.setJobName(...);
    }
}
```

**14. Getting Print Job Status**

```java
import javax.print.PrintJob;

public class GetPrintJobStatus {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Get the print job status
        PrintJob.JobState status = printJob.getState();
    }
}
```

**15. Listening for Print Job Events**

```java
import javax.print.PrintJob;
import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;

public class PrintJobListener {

    public static void main(String[] args) {
        // Get the current print job
        PrintJob printJob = ...

        // Add a print job listener
        printJob.addPrintJobListener(new PrintJobListener() {

            @Override
            public void printJobStateChanged(PrintJobEvent event) {
                // Handle print job state changes
            }

            @Override
            public void printDataTransferCompleted(PrintJobEvent event) {
                // Handle print data transfer completion

```
