import java.awt.*;
import java.awt.print.*;

public class Printing implements Printable {
    private static Paper paper;
    @Override
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
        if (Thread.interrupted())
        {
            throw new PrinterException("Current thread interrupted.");
        }

        Stroke oldstroke = ((Graphics2D)graphics).getStroke();
        ((Graphics2D)graphics).setStroke(new BasicStroke(10));
        ((Graphics2D)graphics).translate(15, 0);
        graphics.drawLine(0,0,0,300); //LEFT margin line
        ((Graphics2D)graphics).translate(-15, 0);

        ((Graphics2D)graphics).translate(0, -15);
        graphics.drawLine(0,(int)paper.getImageableWidth(),300,(int)paper.getImageableWidth());//BOTTOM margin line
        ((Graphics2D)graphics).translate(0, 15);
        ((Graphics2D)graphics).setStroke(oldstroke);

        ((Graphics2D)graphics).setPaint(new java.awt.Color(0,0,0,100));
        ((Graphics2D)graphics).fill(new Rectangle(0,0,200,200));


        return Printable.PAGE_EXISTS;
    }

    public static void main(String[] argv) {
        Printing printer = new Printing();
        PrinterJob printJob = PrinterJob.getPrinterJob();
        PageFormat pageFormat = printJob.defaultPage();
        paper = pageFormat.getPaper();
        paper.setImageableArea(0,0,paper.getWidth(),paper.getHeight());
        pageFormat.setOrientation(PageFormat.LANDSCAPE);
        pageFormat.setPaper(paper);

        Book book = new Book();
        book.append(printer, pageFormat,1);
        printJob.setPageable(book);
        try {
            printJob.print();
        } catch (PrinterException e) {
            e.printStackTrace();
        }

    }
} 