# javax.print

***

**1. Printing a Document**

```java
import javax.print.*;

public class PrintDocument {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.setPrintable(new MyPrintable());
        job.print(attributes);
    }
}
```

**2. Printing a Page Format**

```java
import javax.print.*;
import javax.print.attribute.*;

public class PrintPageFormat {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Set page format
        PageFormat pageFormat = new PageFormat();
        pageFormat.setOrientation(PageFormat.LANDSCAPE);
        pageFormat.setPaper(Size2DSyntax.A4);

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new MediaPrintableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight(), MediaPrintableArea.MM));
        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.setPrintable(new MyPrintable());
        job.setJobName("My Print Job");
        job.print(attributes);
    }
}
```

**3. Printing Multiple Copies**

```java
import javax.print.*;

public class PrintMultipleCopies {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Set print copies
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new Copies(3));

        // Create a print request
        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.setPrintable(new MyPrintable());
        job.print(attributes);
    }
}
```

**4. Setting Print Resolution**

```java
import javax.print.*;
import javax.print.attribute.*;

public class PrintResolution {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Set print resolution
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new PrinterResolution(300, 300, PrinterResolution.DPI));

        // Create a print request
        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.setPrintable(new MyPrintable());
        job.print(attributes);
    }
}
```

**5. Printing a String**

```java
import javax.print.*;

public class PrintString {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

        // Set print content
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.STRING.TEXT_PLAIN;
        byte[] content = "Hello, world!".getBytes();
        Doc doc = new SimpleDoc(content, flavor, null);

        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.print(doc, attributes);
    }
}
```

**6. Printing an Image**

```java
import javax.print.*;

public class PrintImage {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Set print content
        DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

        try (InputStream is = new FileInputStream("image.png")) {
            Doc doc = new SimpleDoc(is, flavor, null);
            PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPrinter(printer);
            job.print(doc, attributes);
        }
    }
}
```

**7. Printing a PDF**

```java
import javax.print.*;

public class PrintPDF {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Set print content
        DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

        try (InputStream is = new FileInputStream("document.pdf")) {
            Doc doc = new SimpleDoc(is, flavor, null);
            PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPrinter(printer);
            job.print(doc, attributes);
        }
    }
}
```

**8. Printing a Custom Printable**

```java
import javax.print.*;

public class PrintCustomPrintable implements Printable {
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
        // Print custom content
        return PAGE_EXISTS;
    }

    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

        // Set print content
        Printable printable = new PrintCustomPrintable();
        Doc doc = new SimpleDoc(printable, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);

        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.print(doc, attributes);
    }
}
```

**9. Printing a Document Stream**

```java
import javax.print.*;

public class PrintDocumentStream implements Printable {
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
        // Print document stream content
        return PAGE_EXISTS;
    }

    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

        // Set print content
        Printable printable = new PrintDocumentStream();
        DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
        InputStream is = new FileInputStream("document.ps");
        Doc doc = new SimpleDoc(is, flavor, null);

        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.print(doc, attributes);
    }
}
```

**10. Printing a Pageable**

```java
import javax.print.*;

public class PrintPageable implements Pageable {
    public PrintRequestAttributeSet getPrintRequestAttributeSet() {
        return new HashPrintRequestAttributeSet();
    }

    public PageFormat getPageFormat(int pageIndex) throws IndexOutOfBoundsException {
        // Return page format
    }

    public Printable getPrintable(int pageIndex) throws IndexOutOfBoundsException {
        // Return printable
    }

    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

        // Set print content
        Pageable pageable = new PrintPageable();
        DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
        Doc doc = new SimpleDoc(pageable, flavor, null);

        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.print(doc, attributes);
    }
}
```

**11. Canceling a Print Job**

```java
import javax.print.*;

public class CancelPrintJob {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

        // Print document and cancel it
        DocFlavor flavor = DocFlavor.TEXT_PLAIN.TEXT_PLAIN;
        byte[] content = "Hello, world!".getBytes();
        Doc doc = new SimpleDoc(content, flavor, null);
        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.print(doc, attributes);
        job.cancel();
    }
}
```

**12. Getting Print Service Attributes**

```java
import javax.print.*;

public class GetPrintServiceAttributes {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Get print service attributes
        PrintServiceAttributeSet attrs = printer.getAttributes();
        for (Attribute attr : attrs.toArray()) {
            System.out.println(attr.getName() + ": " + attr.getValue());
        }
    }
}
```

**13. Setting Print Service Attributes**

```java
import javax.print.*;

public class SetPrintServiceAttributes {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Set print service attributes
        PrintServiceAttributeSet attrs = new HashPrintServiceAttributeSet();
        attrs.add(new PrinterState(PrinterState.Values.SUSPENDED));
        printer.setAttribute(attrs);
    }
}
```

**14. Printing to a File**

```java
import javax.print.*;

public class PrintToFile {
    public static void main(String[] args) throws PrintException {
        // Create a PrintStream for a file
        try (PrintStream ps = new PrintStream("output.txt")) {
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPrintService(PrintServiceLookup.lookupDefaultPrintService());
            job.pageDialog(null);
            job.printDialog();
            job.print(ps);
        }
    }
}
```

**15. Printing to a BufferedImage**

```java
import javax.print.*;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.OrientationRequested;
import javax.swing.JFrame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

public class PrintToBufferedImage {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Create a BufferedImage
        BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();
        g.drawString("Hello, world!", 100, 100);

        // Create a print request
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(OrientationRequested.LANDSCAPE);

        // Print the BufferedImage
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.print(attributes, image);
    }
}
```

**16. Printing to a Specific Page**

```java
import javax.print.*;
import javax.print.attribute.*;

public class PrintToSpecificPage {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Set print range
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new PageRanges(new int[] {2}, new int[] {2}));

        // Create a print request
        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.setPrintable(new MyPrintable());
        job.print(attributes);
    }
}
```

**17. Printing to a Specific Area**

```java
import javax.print.*;
import javax.print.attribute.*;

public class PrintToSpecificArea {
    public static void main(String[] args) throws PrintException {
        // Get the default printer
        Printer printer = PrintServiceLookup.lookupDefaultPrintService();

        // Set print area
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new MediaPrintableArea(new Rectangle(100, 100, 200, 200), MediaPrintableArea.MM));

        // Create a print request
        PrintServiceAttributeSet serviceAttrs = printer.getAttributes();
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrinter(printer);
        job.setPrintable(new MyPrintable());
        job.print(attributes);
    }
}
```

**18. Printing with Dialog**

```java
import javax.print.*;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class PrintWithDialog {
    public static void main(String[] args) throws PrintException {
        // Create a PrintService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintDialog
        PrintDialog printDialog = printerJob.getPrintDialog();
        printDialog.setLocationRelativeTo(null);

        // Add a listener to the PrintDialog
        printDialog.addPrintListener(new PrintListener() {
            public void printDone(PrintEvent e) {
                System.out.println("Printing complete.");
            }

            public void printCanceled(PrintEvent e) {
                System.out.println("Printing canceled.");
            }
        });

        // Show the PrintDialog
        if (printDialog.show()) {
            // Print the document
            try {
                printerJob.print(attributes);
            } catch (PrintException e) {
                e.printStackTrace();
            }
        }
    }
}
```

**19. Printing a Document with Multiple Pages**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithMultiplePages {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new Copies(2));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PageableDocument
        PageableDocument doc = new PageableDocument() {
            public Printable getPrintable(int pageIndex) throws IndexOutOfBoundsException {
                // Return a Printable for each page
            }

            public int getNumberOfPages() {
                // Return the number of pages in the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**20. Printing a Document with Multiple Copies**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithMultipleCopies {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new Copies(2));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**21. Printing a Document with Different Margins**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentMargins {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new MediaPrintableArea(new Rectangle(10, 10, 200, 200), MediaPrintableArea.MM));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**22. Printing a Document with a Different Orientation**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentOrientation {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new OrientationRequested(OrientationRequested.LANDSCAPE));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**23. Printing a Document with a Different Page Size**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentPageSize {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new MediaSizeName(MediaSizeName.NA_LETTER));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**24. Printing a Document with a Different DPI**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentDPI {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new PrinterResolution(300, 300, PrinterResolution.DPI));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**25. Printing a Document with a Different Color Mode**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentColorMode {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new ColorMode(ColorMode.COLOR));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**26. Printing a Document with a Different Duplex Mode**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentDuplexMode {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new Duplex(Duplex.DUPLEX));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**27. Printing a Document with a Different Tumble Mode**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentTumbleMode {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new Tumble(Tumble.LONG_EDGE));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**28. Printing a Document with a Different Scale**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentScale {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new ScaleFactor(0.5, 0.5));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
                // Print the document
            }
        };

        // Print the document
        try {
            printerJob.print(attributes, doc);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
}
```

**29. Printing a Document with a Different Reduct**

```java
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;

public class PrintDocumentWithDifferentReduct {
    public static void main(String[] args) throws PrintException {
        // Create a PrinterService
        PrinterService printerService = PrintServiceLookup.lookupDefaultPrintService();

        // Create a PrintRequestAttributeSet
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new ReductFactor(0.5, 0.5));

        // Create a PrinterJob
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintService(printerService);

        // Create a PrintableDocument
        PrintableDocument doc = new PrintableDocument() {
            public int print(Graphics

```
