Java/SWT JFace Eclipse/Print

Материал из Java эксперт
Перейти к: навигация, поиск

Demonstrates printing images

   <source lang="java">

//Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.printing.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates printing images
*/

public class ImagePrinterExample {

 /**
  * The application entry point
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display, SWT.NONE);
   try {
     // Prompt the user for an image file
     FileDialog fileChooser = new FileDialog(shell, SWT.OPEN);
     String fileName = fileChooser.open();
     if (fileName == null) { return; }
     // Load the image
     ImageLoader loader = new ImageLoader();
     ImageData[] imageData = loader.load(fileName);
     if (imageData.length > 0) {
       // Show the Choose Printer dialog
       PrintDialog dialog = new PrintDialog(shell, SWT.NULL);
       PrinterData printerData = dialog.open();
       if (printerData != null) {
         // Create the printer object
         Printer printer = new Printer(printerData);
 
         // Calculate the scale factor between the screen resolution and printer
         // resolution in order to correctly size the image for the printer
         Point screenDPI = display.getDPI();
         Point printerDPI = printer.getDPI();
         int scaleFactor = printerDPI.x / screenDPI.x;
 
         // Determine the bounds of the entire area of the printer
         Rectangle trim = printer.ruputeTrim(0, 0, 0, 0);
         // Start the print job
         if (printer.startJob(fileName)) {
           if (printer.startPage()) {
             GC gc = new GC(printer);
             Image printerImage = new Image(printer, imageData[0]);
             
             // Draw the image
             gc.drawImage(printerImage, 0, 0, imageData[0].width,
               imageData[0].height, -trim.x, -trim.y, 
               scaleFactor * imageData[0].width, 
               scaleFactor * imageData[0].height);
 
             // Clean up
             printerImage.dispose();
             gc.dispose();
             printer.endPage();
           }
         }
         // End the job and dispose the printer
         printer.endJob();
         printer.dispose();
       }
     }
   } catch (Exception e) {
     MessageBox messageBox = new MessageBox(shell, SWT.ICON_ERROR);
     messageBox.setMessage("Error printing test image");
     messageBox.open();
   }
 }

}

      </source>
   
  
 
  



Demonstrates printing text

   <source lang="java">

//Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.printing.*; import org.eclipse.swt.widgets.*; import java.io.*; /**

* This class demonstrates printing text
*/

public class TextPrinterExample {

 /**
  * Runs the application
  */
 public void run() {
   Display display = new Display();
   Shell shell = new Shell(display);
   // Get the file to print
   FileDialog fileChooser = new FileDialog(shell, SWT.OPEN);
   String fileName = fileChooser.open();
   if (fileName != null) {
     // Have user select a printer
     PrintDialog dialog = new PrintDialog(shell);
     PrinterData printerData = dialog.open();
     if (printerData != null) {
       // Create the printer
       Printer printer = new Printer(printerData);
       try {
         // Print the contents of the file
         new WrappingPrinter(printer, fileName, getFileContents(fileName)).print();
       } catch (Exception e) {
         MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
         mb.setMessage(e.getMessage());
         mb.open();
       }
       // Dispose the printer
       printer.dispose();
     }
   }
   display.dispose();
 }
 /**
  * Read in the file and return its contents
  * @param fileName
  * @return
  * @throws FileNotFoundException
  * @throws IOException
  */
 private String getFileContents(String fileName)
 throws FileNotFoundException, IOException {
   StringBuffer contents = new StringBuffer();
   BufferedReader reader = null;
   try {
     // Read in the file
     reader = new BufferedReader(new FileReader(fileName));
     while (reader.ready()) {
       contents.append(reader.readLine());
       contents.append("\n"); // Throw away LF chars, and just replace CR
     }
   } finally {
     if (reader != null) try {
       reader.close();
     } catch (IOException e) {}
   }
   return contents.toString();
 }
 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new TextPrinterExample().run();
 }

} /**

* This class performs the printing, wrapping text as necessary
*/

class WrappingPrinter {

 private Printer printer; // The printer
 private String fileName; // The name of the file to print
 private String contents; // The contents of the file to print
 private GC gc; // The GC to print on
 private int xPos, yPos; // The current x and y locations for print
 private Rectangle bounds; // The boundaries for the print
 private StringBuffer buf; // Holds a word at a time
 private int lineHeight; // The height of a line of text
 /**
  * WrappingPrinter constructor
  * @param printer the printer
  * @param fileName the fileName
  * @param contents the contents
  */
 WrappingPrinter(Printer printer, String fileName, String contents) {
   this.printer = printer;
   this.fileName = fileName;
   this.contents = contents;
 }
 
 /**
  * Prints the file
  */
 void print() {
   // Start the print job
   if (printer.startJob(fileName)) {
     // Determine print area, with margins
     bounds = computePrintArea(printer);
     xPos = bounds.x;
     yPos = bounds.y;
     
     // Create the GC
     gc = new GC(printer);
     
     // Determine line height
     lineHeight = gc.getFontMetrics().getHeight();
     
     // Determine tab width--use three spaces for tabs
     int tabWidth = gc.stringExtent("   ").x;
     
     // Print the text
     printer.startPage();
     buf = new StringBuffer();
     char c;
     for (int i = 0, n = contents.length(); i < n; i++) {
       // Get the next character
       c = contents.charAt(i);
       
       // Check for newline
       if (c == "\n") {
         printBuffer();
         printNewline();
       }
       // Check for tab
       else if (c == "\t") {
         xPos += tabWidth;
       }
       else {
         buf.append(c);
         // Check for space
         if (Character.isWhitespace(c)) {
           printBuffer();
         }
       }
     }
     printer.endPage();
     printer.endJob();
     gc.dispose();
   }
 }
 /**
  * Prints the contents of the buffer
  */
 void printBuffer() {
   // Get the width of the rendered buffer
   int width = gc.stringExtent(buf.toString()).x;
   
   // Determine if it fits
   if (xPos + width > bounds.x + bounds.width) {
     // Doesn"t fit--wrap
     printNewline();
   }
   
   // Print the buffer
   gc.drawString(buf.toString(), xPos, yPos, false);
   xPos += width;
   buf.setLength(0);
 }
 /**
  * Prints a newline
  */
 void printNewline() {
   // Reset x and y locations to next line
   xPos = bounds.x;
   yPos += lineHeight;
   
   // Have we gone to the next page?
   if (yPos > bounds.y + bounds.height) {
     yPos = bounds.y;
     printer.endPage();
     printer.startPage();
   }
 }
 /**
  * Computes the print area, including margins
  * @param printer the printer
  * @return Rectangle
  */
 Rectangle computePrintArea(Printer printer) {
   // Get the printable area
   Rectangle rect = printer.getClientArea();
   
   // Compute the trim
   Rectangle trim = printer.ruputeTrim(0, 0, 0, 0);
   
   // Get the printer"s DPI
   Point dpi = printer.getDPI();
   
   // Calculate the printable area, using 1 inch margins
   int left = trim.x + dpi.x;
   if (left < rect.x) left = rect.x;
   
   int right = (rect.width + trim.x + trim.width) - dpi.x;
   if (right > rect.width) right = rect.width;
   
   int top = trim.y + dpi.y;
   if (top < rect.y) top = rect.y;
   
   int bottom = (rect.height + trim.y + trim.height) - dpi.y;
   if (bottom > rect.height) bottom = rect.height;
   
   return new Rectangle(left, top, right - left, bottom - top);
 }

}

      </source>
   
  
 
  



ImageViewer

   <source lang="java">

/*******************************************************************************

* All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on 2004-5-2 14:57:37 by JACK $Id$
*  
******************************************************************************/

import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.rubo; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class SWTImageViewer {

 Display display = new Display();
 Shell shell = new Shell(display);
 Canvas canvas;
 Image image;
 String fileName;
 public SWTImageViewer() {
   shell.setText("Image viewer");
   shell.setLayout(new GridLayout(1, true));
   ToolBar toolBar = new ToolBar(shell, SWT.FLAT);
   ToolItem itemOpen = new ToolItem(toolBar, SWT.PUSH);
   itemOpen.setText("Open");
   itemOpen.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event event) {
       FileDialog dialog = new FileDialog(shell, SWT.OPEN);
       String file = dialog.open();
       if (file != null) {
         if (image != null)
           image.dispose();
         image = null;
         try {
           image = new Image(display, file);
         } catch (RuntimeException e) {
           // e.printStackTrace();
         }
         if (image != null) {
           fileName = file;
         } else {
           System.err.println(
             "Failed to load image from file: " + file);
         }
         canvas.redraw();
       }
     }
   });
   ToolItem itemPrintPreview = new ToolItem(toolBar, SWT.PUSH);
   itemPrintPreview.setText("Preview");
   itemPrintPreview.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event event) {
       ImagePrintPreviewDialog dialog =
         new ImagePrintPreviewDialog(ImageViewer.this);
       dialog.open();
     }
   });
   ToolItem itemPrint = new ToolItem(toolBar, SWT.PUSH);
   itemPrint.setText("Print");
   itemPrint.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event event) {
       print();
     }
   });
   canvas = new Canvas(shell, SWT.BORDER);
   canvas.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
   canvas.setLayoutData(new GridData(GridData.FILL_BOTH));
   canvas.addPaintListener(new PaintListener() {
     public void paintControl(PaintEvent e) {
       if (image == null) {
         e.gc.drawString("No image", 0, 0);
       } else {
         e.gc.drawImage(image, 0, 0);
       }
     }
   });
   image = new Image(display, "jexp.gif");
   fileName = "scene.jpg";
   shell.setSize(500, 400);
   shell.open();
   //textUser.forceFocus();
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 /**
  * Lets the user to select a printer and prints the image on it.
  *  
  */
 void print() {
   PrintDialog dialog = new PrintDialog(shell);
   // Prompts the printer dialog to let the user select a printer.
   PrinterData printerData = dialog.open();
   if (printerData == null) // the user cancels the dialog
     return;
   // Loads the printer.
   Printer printer = new Printer(printerData);
   print(printer, null);
 }
 /**
  * Prints the image current displayed to the specified printer.
  * 
  * @param printer
  */
 void print(final Printer printer, PrintMargin printMargin) {
   if (image == null) // If no image is loaded, do not print.
     return;
   final Point printerDPI = printer.getDPI();
   final Point displayDPI = display.getDPI();
   System.out.println(displayDPI + " " + printerDPI);
   
   final PrintMargin margin = (printMargin == null ?  PrintMargin.getPrintMargin(printer, 1.0) : printMargin);
   Thread printThread = new Thread() {
     public void run() {
       if (!printer.startJob(fileName)) {
         System.err.println("Failed to start print job!");
         printer.dispose();
         return;
       }
       GC gc = new GC(printer);
       if (!printer.startPage()) {
         System.err.println("Failed to start a new page!");
         gc.dispose();
         return;
       } else {
         int imageWidth = image.getBounds().width;
         int imageHeight = image.getBounds().height;
         // Handles DPI conversion.
         double dpiScaleFactorX = printerDPI.x * 1.0 / displayDPI.x;
         double dpiScaleFactorY = printerDPI.y * 1.0 / displayDPI.y;
         // If the image is too large to draw on a page, reduces its
         // width and height proportionally.
         double imageSizeFactor =
           Math.min(
             1,
             (margin.right - margin.left)
               * 1.0
               / (dpiScaleFactorX * imageWidth));
         imageSizeFactor =
           Math.min(
             imageSizeFactor,
             (margin.bottom - margin.top)
               * 1.0
               / (dpiScaleFactorY * imageHeight));
         // Draws the image to the printer.
         gc.drawImage(
           image,
           0,
           0,
           imageWidth,
           imageHeight,
           margin.left,
           margin.top,
           (int) (dpiScaleFactorX * imageSizeFactor * imageWidth),
           (int) (dpiScaleFactorY
             * imageSizeFactor
             * imageHeight));
         gc.dispose();
       }
       printer.endPage();
       printer.endJob();
       printer.dispose();
       System.out.println("Printing job done!");
     }
   };
   printThread.start();
 }
 public static void main(String[] args) {
   new SWTImageViewer();
 }

} class ImagePrintPreviewDialog extends Dialog {

 ImageViewer viewer;
 Shell shell;
 Canvas canvas;
 Printer printer;
 PrintMargin margin;
 Combo combo;
 public ImagePrintPreviewDialog(ImageViewer viewer) {
   super(viewer.shell);
   this.viewer = viewer;
 }
 public void open() {
   shell =
     new Shell(
       viewer.shell,
       SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE);
   shell.setText("Print preview");
   shell.setLayout(new GridLayout(4, false));
   final Button buttonSelectPrinter = new Button(shell, SWT.PUSH);
   buttonSelectPrinter.setText("Select a printer");
   buttonSelectPrinter.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event event) {
       PrintDialog dialog = new PrintDialog(shell);
       // Prompts the printer dialog to let the user select a printer.
       PrinterData printerData = dialog.open();
       if (printerData == null) // the user cancels the dialog
         return;
       // Loads the printer.
       final Printer printer = new Printer(printerData);
       setPrinter(
         printer,
         Double.parseDouble(
           combo.getItem(combo.getSelectionIndex())));
     }
   });
   new Label(shell, SWT.NULL).setText("Margin in inches: ");
   combo = new Combo(shell, SWT.READ_ONLY);
   combo.add("0.5");
   combo.add("1.0");
   combo.add("1.5");
   combo.add("2.0");
   combo.add("2.5");
   combo.add("3.0");
   combo.select(1);
   combo.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event event) {
       double value =
         Double.parseDouble(
           combo.getItem(combo.getSelectionIndex()));
       setPrinter(printer, value);
     }
   });
   final Button buttonPrint = new Button(shell, SWT.PUSH);
   buttonPrint.setText("Print");
   buttonPrint.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event event) {
       if (printer == null)
         viewer.print();
       else
         viewer.print(printer, margin);
       shell.dispose();
     }
   });
   canvas = new Canvas(shell, SWT.BORDER);
   GridData gridData = new GridData(GridData.FILL_BOTH);
   gridData.horizontalSpan = 4;
   canvas.setLayoutData(gridData);
   canvas.addPaintListener(new PaintListener() {
     public void paintControl(PaintEvent e) {
       int canvasBorder = 20;
       if (printer == null || printer.isDisposed())
         return;
       Rectangle rectangle = printer.getBounds();
       Point canvasSize = canvas.getSize();
       double viewScaleFactor =
         (canvasSize.x - canvasBorder * 2) * 1.0 / rectangle.width;
       viewScaleFactor =
         Math.min(
           viewScaleFactor,
           (canvasSize.y - canvasBorder * 2)
             * 1.0
             / rectangle.height);
       int offsetX =
         (canvasSize.x - (int) (viewScaleFactor * rectangle.width))
           / 2;
       int offsetY =
         (canvasSize.y - (int) (viewScaleFactor * rectangle.height))
           / 2;
       e.gc.setBackground(
         shell.getDisplay().getSystemColor(SWT.COLOR_WHITE));
       // draws the page layout
       e.gc.fillRectangle(
         offsetX,
         offsetY,
         (int) (viewScaleFactor * rectangle.width),
         (int) (viewScaleFactor * rectangle.height));
       // draws the margin.
       e.gc.setLineStyle(SWT.LINE_DASH);
       e.gc.setForeground(
         shell.getDisplay().getSystemColor(SWT.COLOR_BLACK));
       int marginOffsetX =
         offsetX + (int) (viewScaleFactor * margin.left);
       int marginOffsetY =
         offsetY + (int) (viewScaleFactor * margin.top);
       e.gc.drawRectangle(
         marginOffsetX,
         marginOffsetY,
         (int) (viewScaleFactor * (margin.right - margin.left)),
         (int) (viewScaleFactor * (margin.bottom - margin.top)));
       if (viewer.image != null) {
         int imageWidth = viewer.image.getBounds().width;
         int imageHeight = viewer.image.getBounds().height;
         double dpiScaleFactorX =
           printer.getDPI().x
             * 1.0
             / shell.getDisplay().getDPI().x;
         double dpiScaleFactorY =
           printer.getDPI().y
             * 1.0
             / shell.getDisplay().getDPI().y;
         double imageSizeFactor =
           Math.min(
             1,
             (margin.right - margin.left)
               * 1.0
               / (dpiScaleFactorX * imageWidth));
         imageSizeFactor =
           Math.min(
             imageSizeFactor,
             (margin.bottom - margin.top)
               * 1.0
               / (dpiScaleFactorY * imageHeight));
         e.gc.drawImage(
           viewer.image,
           0,
           0,
           imageWidth,
           imageHeight,
           marginOffsetX,
           marginOffsetY,
           (int) (dpiScaleFactorX
             * imageSizeFactor
             * imageWidth
             * viewScaleFactor),
           (int) (dpiScaleFactorY
             * imageSizeFactor
             * imageHeight
             * viewScaleFactor));
       }
     }
   });
   shell.setSize(400, 400);
   shell.open();
   setPrinter(null, 1.0);
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!shell.getDisplay().readAndDispatch()) {
       // If no more entries in event queue
       shell.getDisplay().sleep();
     }
   }
 }
 /**
  * Sets target printer.
  * 
  * @param printer
  */
 void setPrinter(Printer printer, double marginSize) {
   if (printer == null) {
     printer = new Printer(Printer.getDefaultPrinterData());
   }
   this.printer = printer;
   margin = PrintMargin.getPrintMargin(printer, marginSize);
   canvas.redraw();
 }

} /**

* Contains margin information (in pixels) for a print job.
*  
*/

class PrintMargin {

 // Margin to the left side, in pixels
 public int left;
 //  Margins to the right side, in pixels
 public int right;
 //  Margins to the top side, in pixels
 public int top;
 //  Margins to the bottom side, in pixels
 public int bottom;
 private PrintMargin(int left, int right, int top, int bottom) {
   this.left = left;
   this.right = right;
   this.top = top;
   this.bottom = bottom;
 }
 /**
  * Returns a PrintMargin object containing the true border margins for the
  * specified printer with the given margin in inches.
  * Note: all four sides share the same margin width. 
  * @param printer
  * @param margin
  * @return
  */
 static PrintMargin getPrintMargin(Printer printer, double margin) {
   return getPrintMargin(printer, margin, margin, margin, margin);
 }
 /**
  * Returns a PrintMargin object containing the true border margins for the
  * specified printer with the given margin width (in inches) for each side.
  */
 static PrintMargin getPrintMargin(
   Printer printer,
   double marginLeft,
   double marginRight,
   double marginTop,
   double marginBottom) {
   Rectangle clientArea = printer.getClientArea();
   Rectangle trim = printer.ruputeTrim(0, 0, 0, 0);
   //System.out.println(printer.getBounds() + " - " + clientArea + "" +
   // trim);
   Point dpi = printer.getDPI();
   int leftMargin = (int) (marginLeft * dpi.x) - trim.x;
   int rightMargin =
     clientArea.width
       + trim.width
       - (int) (marginRight * dpi.x)
       - trim.x;
   int topMargin = (int) (marginTop * dpi.y) - trim.y;
   int bottomMargin =
     clientArea.height
       + trim.height
       - (int) (marginBottom * dpi.y)
       - trim.y;
   return new PrintMargin(
     leftMargin,
     rightMargin,
     topMargin,
     bottomMargin);
 }
 public String toString() {
   return "Margin { "
     + left
     + ", "
     + right
     + "; "
     + top
     + ", "
     + bottom
     + " }";
 }

}


      </source>
   
  
 
  



Print Hello World in black, outlined in red, to default printer

   <source lang="java">

/*

* Printing example snippet: print "Hello World!" in black, outlined in red, to default printer
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class Snippet132 {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.open();
   PrinterData data = Printer.getDefaultPrinterData();
   if (data == null) {
     System.out.println("Warning: No default printer.");
     return;
   }
   Printer printer = new Printer(data);
   if (printer.startJob("SWT Printing Snippet")) {
     Color black = printer.getSystemColor(SWT.COLOR_BLACK);
     Color white = printer.getSystemColor(SWT.COLOR_WHITE);
     Color red = printer.getSystemColor(SWT.COLOR_RED);
     Rectangle trim = printer.ruputeTrim(0, 0, 0, 0);
     Point dpi = printer.getDPI();
     int leftMargin = dpi.x + trim.x; // one inch from left side of
                       // paper
     int topMargin = dpi.y / 2 + trim.y; // one-half inch from top edge
                       // of paper
     GC gc = new GC(printer);
     Font font = gc.getFont(); // example just uses printer"s default
                   // font
     if (printer.startPage()) {
       gc.setBackground(white);
       gc.setForeground(black);
       String testString = "Hello World!";
       Point extent = gc.stringExtent(testString);
       gc.drawString(testString, leftMargin, topMargin
           + font.getFontData()[0].getHeight());
       gc.setForeground(red);
       gc.drawRectangle(leftMargin, topMargin, extent.x, extent.y);
       printer.endPage();
     }
     gc.dispose();
     printer.endJob();
   }
   printer.dispose();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}

      </source>
   
  
 
  



Printing Example

   <source lang="java">

/******************************************************************************

* All Right Reserved. 
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on 2004-5-2 11:03:19 by JACK
* $Id$
* 
*****************************************************************************/

/*

* Printing example snippet: print text to printer, with word wrap and pagination
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.jface.window.WindowManager; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.custom.StyledTextPrintOptions; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.FontDialog; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class PrintingExample {

 ApplicationWindow applicationWindow;
 WindowManager manager;
 
 StyledTextPrintOptions styledTextPrintOptions;
 StyledText styledText;
 
 Display display;
 Shell shell;
 Text text;
 Font font;
 Color foregroundColor, backgroundColor;
 
 Printer printer;
 GC gc;
 Font printerFont;
 Color printerForegroundColor, printerBackgroundColor;
 int lineHeight = 0;
 int tabWidth = 0;
 int leftMargin, rightMargin, topMargin, bottomMargin;
 int x, y;
 int index, end;
 String textToPrint;
 String tabs;
 StringBuffer wordBuffer;
 public static void main(String[] args) {
   new PrintingExample().open();
 }
 
 void open() {
   display = new Display();
   font = new Font(display, "Courier", 10, SWT.NORMAL);
   foregroundColor = display.getSystemColor(SWT.COLOR_BLACK);
   backgroundColor = display.getSystemColor(SWT.COLOR_WHITE);
   shell = new Shell(display);
   shell.setLayout(new FillLayout());
   shell.setText("Print Text");
   shell.setMaximized(true);
   text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
   text.setFont(font);
   text.setForeground(foregroundColor);
   text.setBackground(backgroundColor);
   
   Menu menuBar = new Menu(shell, SWT.BAR);
   shell.setMenuBar(menuBar);
   MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
   item.setText("&File");
   Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
   item.setMenu(fileMenu);
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("&Open...");
   item.setAccelerator(SWT.CTRL + "O");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuOpen();
     }
   });
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("Font...");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuFont();
     }
   });
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("Foreground Color...");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuForegroundColor();
     }
   });
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("Background Color...");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuBackgroundColor();
     }
   });
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("&Print...");
   item.setAccelerator(SWT.CTRL + "P");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuPrint();
     }
   });
   new MenuItem(fileMenu, SWT.SEPARATOR);
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("E&xit");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       System.exit(0);
     }
   });
   
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) display.sleep();
   }
   if (font != null) font.dispose();
   if (foregroundColor != null) foregroundColor.dispose();
   if (backgroundColor != null) backgroundColor.dispose();
 }
   
 void menuOpen() {
   final String textString;
   FileDialog dialog = new FileDialog(shell, SWT.OPEN);
   dialog.setFilterExtensions(new String[] {"*.java", "*.*"});
   String name = dialog.open();
   if ((name == null) || (name.length() == 0)) return;
 
   try {
     File file = new File(name);
     FileInputStream stream= new FileInputStream(file.getPath());
     try {
       Reader in = new BufferedReader(new InputStreamReader(stream));
       char[] readBuffer= new char[2048];
       StringBuffer buffer= new StringBuffer((int) file.length());
       int n;
       while ((n = in.read(readBuffer)) > 0) {
         buffer.append(readBuffer, 0, n);
       }
       textString = buffer.toString();
       stream.close();
     } catch (IOException e) {
       MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
       box.setMessage("Error reading file:\n" + name);
       box.open();
       return;
     }
   } catch (FileNotFoundException e) {
     MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
     box.setMessage("File not found:\n" + name);
     box.open();
     return;
   }  
   text.setText(textString);
 }
 void menuFont() {
   FontDialog fontDialog = new FontDialog(shell);
   fontDialog.setFontList(font.getFontData());
   FontData fontData = fontDialog.open();
   if (fontData != null) {
     if (font != null) font.dispose();
     font = new Font(display, fontData);
     text.setFont(font);
   }
 }
 void menuForegroundColor() {
   ColorDialog colorDialog = new ColorDialog(shell);
   colorDialog.setRGB(foregroundColor.getRGB());
   RGB rgb = colorDialog.open();
   if (rgb != null) {
     if (foregroundColor != null) foregroundColor.dispose();
     foregroundColor = new Color(display, rgb);
     text.setForeground(foregroundColor);
   }
 }
 void menuBackgroundColor() {
   ColorDialog colorDialog = new ColorDialog(shell);
   colorDialog.setRGB(backgroundColor.getRGB());
   RGB rgb = colorDialog.open();
   if (rgb != null) {
     if (backgroundColor != null) backgroundColor.dispose();
     backgroundColor = new Color(display, rgb);
     text.setBackground(backgroundColor);
   }
 }
 void menuPrint() {
   PrintDialog dialog = new PrintDialog(shell, SWT.NULL);
   PrinterData data = dialog.open();
   if (data == null) return;
   if (data.printToFile) {
     data.fileName = "print.out"; // you probably want to ask the user for a filename
   }
   
   /* Get the text to print from the Text widget (you could get it from anywhere, i.e. your java model) */
   textToPrint = text.getText();
   /* Do the printing in a background thread so that spooling does not freeze the UI. */
   printer = new Printer(data);
   Thread printingThread = new Thread("Printing") {
     public void run() {
       print(printer);
       printer.dispose();
     }
   };
   printingThread.start();
 }
 
 void print(Printer printer) {
   if (printer.startJob("Text")) {   // the string is the job name - shows up in the printer"s job list
     Rectangle clientArea = printer.getClientArea();
     Rectangle trim = printer.ruputeTrim(0, 0, 0, 0);
     Point dpi = printer.getDPI();
     leftMargin = dpi.x + trim.x; // one inch from left side of paper
     rightMargin = clientArea.width - dpi.x + trim.x + trim.width; // one inch from right side of paper
     topMargin = dpi.y + trim.y; // one inch from top edge of paper
     bottomMargin = clientArea.height - dpi.y + trim.y + trim.height; // one inch from bottom edge of paper
     
     /* Create a buffer for computing tab width. */
     int tabSize = 4; // is tab width a user setting in your UI?
     StringBuffer tabBuffer = new StringBuffer(tabSize);
     for (int i = 0; i < tabSize; i++) tabBuffer.append(" ");
     tabs = tabBuffer.toString();
     /* Create printer GC, and create and set the printer font & foreground color. */
     gc = new GC(printer);
     
     FontData fontData = font.getFontData()[0];
     printerFont = new Font(printer, fontData.getName(), fontData.getHeight(), fontData.getStyle());
     gc.setFont(printerFont);
     tabWidth = gc.stringExtent(tabs).x;
     lineHeight = gc.getFontMetrics().getHeight();
     
     RGB rgb = foregroundColor.getRGB();
     printerForegroundColor = new Color(printer, rgb);
     gc.setForeground(printerForegroundColor);
   
     rgb = backgroundColor.getRGB();
     printerBackgroundColor = new Color(printer, rgb);
     gc.setBackground(printerBackgroundColor);
   
     /* Print text to current gc using word wrap */
     printText();
     printer.endJob();
     /* Cleanup graphics resources used in printing */
     printerFont.dispose();
     printerForegroundColor.dispose();
     printerBackgroundColor.dispose();
     gc.dispose();
   }
 }
 
 void printText() {
   printer.startPage();
   wordBuffer = new StringBuffer();
   x = leftMargin;
   y = topMargin;
   index = 0;
   end = textToPrint.length();
   while (index < end) {
     char c = textToPrint.charAt(index);
     index++;
     if (c != 0) {
       if (c == 0x0a || c == 0x0d) {
         if (c == 0x0d && index < end && textToPrint.charAt(index) == 0x0a) {
           index++; // if this is cr-lf, skip the lf
         }
         printWordBuffer();
         newline();
       } else {
         if (c != "\t") {
           wordBuffer.append(c);
         }
         if (Character.isWhitespace(c)) {
           printWordBuffer();
           if (c == "\t") {
             x += tabWidth;
           }
         }
       }
     }
   }
   if (y + lineHeight <= bottomMargin) {
     printer.endPage();
   }
 }
 void printWordBuffer() {
   if (wordBuffer.length() > 0) {
     String word = wordBuffer.toString();
     int wordWidth = gc.stringExtent(word).x;
     if (x + wordWidth > rightMargin) {
       /* word doesn"t fit on current line, so wrap */
       newline();
     }
     gc.drawString(word, x, y, false);
     x += wordWidth;
     wordBuffer = new StringBuffer();
   }
 }
 void newline() {
   x = leftMargin;
   y += lineHeight;
   if (y + lineHeight > bottomMargin) {
     printer.endPage();
     if (index + 1 < end) {
       y = topMargin;
       printer.startPage();
     }
   }
 }

}

      </source>
   
  
 
  



Print text to printer, with word wrap and pagination

   <source lang="java">

/*

* Printing example snippet: print text to printer, with word wrap and pagination
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.FontDialog; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class Snippet133 {

 Display display;
 Shell shell;
 Text text;
 Font font;
 Color foregroundColor, backgroundColor;
 Printer printer;
 GC gc;
 Font printerFont;
 Color printerForegroundColor, printerBackgroundColor;
 int lineHeight = 0;
 int tabWidth = 0;
 int leftMargin, rightMargin, topMargin, bottomMargin;
 int x, y;
 int index, end;
 String textToPrint;
 String tabs;
 StringBuffer wordBuffer;
 public static void main(String[] args) {
   new Snippet133().open();
 }
 void open() {
   display = new Display();
   font = new Font(display, "Courier", 10, SWT.NORMAL);
   foregroundColor = display.getSystemColor(SWT.COLOR_BLACK);
   backgroundColor = display.getSystemColor(SWT.COLOR_WHITE);
   shell = new Shell(display);
   shell.setLayout(new FillLayout());
   shell.setText("Print Text");
   shell.setMaximized(true);
   text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL
       | SWT.H_SCROLL);
   text.setFont(font);
   text.setForeground(foregroundColor);
   text.setBackground(backgroundColor);
   Menu menuBar = new Menu(shell, SWT.BAR);
   shell.setMenuBar(menuBar);
   MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
   item.setText("&File");
   Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
   item.setMenu(fileMenu);
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("&Open...");
   item.setAccelerator(SWT.CTRL + "O");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuOpen();
     }
   });
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("Font...");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuFont();
     }
   });
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("Foreground Color...");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuForegroundColor();
     }
   });
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("Background Color...");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuBackgroundColor();
     }
   });
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("&Print...");
   item.setAccelerator(SWT.CTRL + "P");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       menuPrint();
     }
   });
   new MenuItem(fileMenu, SWT.SEPARATOR);
   item = new MenuItem(fileMenu, SWT.PUSH);
   item.setText("E&xit");
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       System.exit(0);
     }
   });
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   if (font != null)
     font.dispose();
   if (foregroundColor != null)
     foregroundColor.dispose();
   if (backgroundColor != null)
     backgroundColor.dispose();
 }
 void menuOpen() {
   final String textString;
   FileDialog dialog = new FileDialog(shell, SWT.OPEN);
   dialog.setFilterExtensions(new String[] { "*.java", "*.*" });
   String name = dialog.open();
   if ((name == null) || (name.length() == 0))
     return;
   try {
     File file = new File(name);
     FileInputStream stream = new FileInputStream(file.getPath());
     try {
       Reader in = new BufferedReader(new InputStreamReader(stream));
       char[] readBuffer = new char[2048];
       StringBuffer buffer = new StringBuffer((int) file.length());
       int n;
       while ((n = in.read(readBuffer)) > 0) {
         buffer.append(readBuffer, 0, n);
       }
       textString = buffer.toString();
       stream.close();
     } catch (IOException e) {
       MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
       box.setMessage("Error reading file:\n" + name);
       box.open();
       return;
     }
   } catch (FileNotFoundException e) {
     MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
     box.setMessage("File not found:\n" + name);
     box.open();
     return;
   }
   text.setText(textString);
 }
 void menuFont() {
   FontDialog fontDialog = new FontDialog(shell);
   fontDialog.setFontList(font.getFontData());
   FontData fontData = fontDialog.open();
   if (fontData != null) {
     if (font != null)
       font.dispose();
     font = new Font(display, fontData);
     text.setFont(font);
   }
 }
 void menuForegroundColor() {
   ColorDialog colorDialog = new ColorDialog(shell);
   colorDialog.setRGB(foregroundColor.getRGB());
   RGB rgb = colorDialog.open();
   if (rgb != null) {
     if (foregroundColor != null)
       foregroundColor.dispose();
     foregroundColor = new Color(display, rgb);
     text.setForeground(foregroundColor);
   }
 }
 void menuBackgroundColor() {
   ColorDialog colorDialog = new ColorDialog(shell);
   colorDialog.setRGB(backgroundColor.getRGB());
   RGB rgb = colorDialog.open();
   if (rgb != null) {
     if (backgroundColor != null)
       backgroundColor.dispose();
     backgroundColor = new Color(display, rgb);
     text.setBackground(backgroundColor);
   }
 }
 void menuPrint() {
   PrintDialog dialog = new PrintDialog(shell, SWT.NONE);
   PrinterData data = dialog.open();
   if (data == null)
     return;
   if (data.printToFile) {
     data.fileName = "print.out"; // you probably want to ask the user
                     // for a filename
   }
   /*
    * Get the text to print from the Text widget (you could get it from
    * anywhere, i.e. your java model)
    */
   textToPrint = text.getText();
   /*
    * Do the printing in a background thread so that spooling does not
    * freeze the UI.
    */
   printer = new Printer(data);
   Thread printingThread = new Thread("Printing") {
     public void run() {
       print(printer);
       printer.dispose();
     }
   };
   printingThread.start();
 }
 void print(Printer printer) {
   if (printer.startJob("Text")) { // the string is the job name - shows up
                   // in the printer"s job list
     Rectangle clientArea = printer.getClientArea();
     Rectangle trim = printer.ruputeTrim(0, 0, 0, 0);
     Point dpi = printer.getDPI();
     leftMargin = dpi.x + trim.x; // one inch from left side of paper
     rightMargin = clientArea.width - dpi.x + trim.x + trim.width; // one
                                     // inch
                                     // from
                                     // right
                                     // side
                                     // of
                                     // paper
     topMargin = dpi.y + trim.y; // one inch from top edge of paper
     bottomMargin = clientArea.height - dpi.y + trim.y + trim.height; // one
                                       // inch
                                       // from
                                       // bottom
                                       // edge
                                       // of
                                       // paper
     /* Create a buffer for computing tab width. */
     int tabSize = 4; // is tab width a user setting in your UI?
     StringBuffer tabBuffer = new StringBuffer(tabSize);
     for (int i = 0; i < tabSize; i++)
       tabBuffer.append(" ");
     tabs = tabBuffer.toString();
     /*
      * Create printer GC, and create and set the printer font &
      * foreground color.
      */
     gc = new GC(printer);
     FontData fontData = font.getFontData()[0];
     printerFont = new Font(printer, fontData.getName(), fontData
         .getHeight(), fontData.getStyle());
     gc.setFont(printerFont);
     tabWidth = gc.stringExtent(tabs).x;
     lineHeight = gc.getFontMetrics().getHeight();
     RGB rgb = foregroundColor.getRGB();
     printerForegroundColor = new Color(printer, rgb);
     gc.setForeground(printerForegroundColor);
     rgb = backgroundColor.getRGB();
     printerBackgroundColor = new Color(printer, rgb);
     gc.setBackground(printerBackgroundColor);
     /* Print text to current gc using word wrap */
     printText();
     printer.endJob();
     /* Cleanup graphics resources used in printing */
     printerFont.dispose();
     printerForegroundColor.dispose();
     printerBackgroundColor.dispose();
     gc.dispose();
   }
 }
 void printText() {
   printer.startPage();
   wordBuffer = new StringBuffer();
   x = leftMargin;
   y = topMargin;
   index = 0;
   end = textToPrint.length();
   while (index < end) {
     char c = textToPrint.charAt(index);
     index++;
     if (c != 0) {
       if (c == 0x0a || c == 0x0d) {
         if (c == 0x0d && index < end
             && textToPrint.charAt(index) == 0x0a) {
           index++; // if this is cr-lf, skip the lf
         }
         printWordBuffer();
         newline();
       } else {
         if (c != "\t") {
           wordBuffer.append(c);
         }
         if (Character.isWhitespace(c)) {
           printWordBuffer();
           if (c == "\t") {
             x += tabWidth;
           }
         }
       }
     }
   }
   if (y + lineHeight <= bottomMargin) {
     printer.endPage();
   }
 }
 void printWordBuffer() {
   if (wordBuffer.length() > 0) {
     String word = wordBuffer.toString();
     int wordWidth = gc.stringExtent(word).x;
     if (x + wordWidth > rightMargin) {
       /* word doesn"t fit on current line, so wrap */
       newline();
     }
     gc.drawString(word, x, y, false);
     x += wordWidth;
     wordBuffer = new StringBuffer();
   }
 }
 void newline() {
   x = leftMargin;
   y += lineHeight;
   if (y + lineHeight > bottomMargin) {
     printer.endPage();
     if (index + 1 < end) {
       y = topMargin;
       printer.startPage();
     }
   }
 }

}

      </source>
   
  
 
  



Simple Print

   <source lang="java">

/******************************************************************************

* All Right Reserved. 
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on 2004-5-2 21:35:30 by JACK
* $Id$
* 
*****************************************************************************/

import org.eclipse.swt.graphics.GC; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class SimplePrint {

 Display display = new Display();
 Shell shell = new Shell(display);
 public SimplePrint() {
   shell.pack();
   shell.open();
   PrintDialog dialog = new PrintDialog(shell);
   // Opens a dialog and let use user select the 
   // target printer and configure various settings.
   PrinterData printerData = dialog.open();
   if(printerData != null) { // If a printer is selected
     // Creates a printer.
     Printer printer = new Printer(printerData);
     
     // Starts the print job.
     if(printer.startJob("Text")) {
       GC gc = new GC(printer);
       // Starts a new page.
       if(printer.startPage()) {
         gc.drawString("Eclipse", 200, 200);
         
         // Finishes the page. 
         printer.endPage();
       }
       
       gc.dispose();
       
       // Ends the job.
       printer.endJob();
     }
     
     // Disposes the printer object after use. 
     printer.dispose();
     
     System.out.println("Print job done.");
   }
   
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 private void init() {
 }
 public static void main(String[] args) {
   new SimplePrint();
 }

}

      </source>
   
  
 
  



SWT Print and 2D Graphics

   <source lang="java">

/*******************************************************************************

* Copyright (c) 2004 Berthold Daum. All rights reserved. This program and the
* accompanying materials are made available under the terms of the Common
* Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
* 
* Contributors: Berthold Daum
******************************************************************************/

import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.StackLayout; import org.eclipse.swt.events.ArmEvent; import org.eclipse.swt.events.ArmListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class widgetTest3 {

 public static void main(String[] args) {
   // Create display instance
   final Display display = new Display();
   // Create top level shell (pass display as parent)
   final Shell toplevelShell = new Shell(display);
   // Set title
   toplevelShell.setText("TopLevel.Titelzeile");
   // Fill the shell completely with content
   toplevelShell.setLayout(new FillLayout());
   // Create tabbed folder
   TabFolder folder = new TabFolder(toplevelShell, SWT.NONE);
   // Protocol selection event
   folder.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       System.out.println("Tab selected: "
           + ((TabItem) (e.item)).getText());
     }
   });
   // Fill tabbed folder completely with content
   folder.setLayout(new FillLayout());
   Composite page1 = createTabPage(folder, "tab1");
   // We can now place more GUI elements onto page1
   //...
   Composite page2 = createTabPage(folder, "tab2");
   // We can now place more GUI elements onto page2
   //...
   // Display shell
   toplevelShell.open();
   // Event loop
   while (!toplevelShell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
 }
 private static Composite createTabPage(TabFolder folder, String label) {
   // Create and label a new tab
   TabItem tab = new TabItem(folder, SWT.NONE);
   tab.setText(label);
   // Create a new page as a Composite instance
   Composite page = new Composite(folder, SWT.NONE);
   //... and assign to tab
   tab.setControl(page);
   return page;
 }
 /** * Menu ** */
 public static Menu createMenu(final Shell toplevelShell) {
   //     Menuleiste anlegen
   Menu menuBar = new Menu(toplevelShell, SWT.BAR);
   toplevelShell.setMenuBar(menuBar);
   //     Menutitel anlegen
   MenuItem fileTitle = new MenuItem(menuBar, SWT.CASCADE);
   fileTitle.setText("File");
   //     Untermenu fur diesen Menutitel anlegen
   Menu fileMenu = new Menu(toplevelShell, SWT.DROP_DOWN);
   fileTitle.setMenu(fileMenu);
   //     Menueintrag anlegen
   MenuItem item = new MenuItem(fileMenu, SWT.NULL);
   item.setText("Exit");
   //     Ereignisverarbeitung fur Menueintrag
   item.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       toplevelShell.close();
     }
   });
   return menuBar;
 }
 /** * Coolbar ** */
 public CoolBar createCoolBar(Composite composite) {
   //     Create CoolBar
   final CoolBar coolbar = new CoolBar(composite, SWT.NULL);
   //     Create ToolBar as a component of CoolBar
   final ToolBar toolbar1 = new ToolBar(coolbar, SWT.NULL);
   //     Create pushbutton
   final ToolItem toolitem1 = new ToolItem(toolbar1, SWT.PUSH);
   toolitem1.setText("Push");
   toolitem1.setToolTipText("Push button");
   //     Create event processing for pushbutton
   toolitem1.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       System.out.println("Tool button was pressed: "
           + toolitem1.getText());
     }
   });
   //     Create check button
   final ToolItem toolitem2 = new ToolItem(toolbar1, SWT.CHECK);
   toolitem2.setText("Check");
   toolitem2.setToolTipText("Check button");
   //     Create CoolItem instance
   final CoolItem coolitem1 = new CoolItem(coolbar, SWT.NULL);
   //     Assign this tool bar to the CoolItem instance
   coolitem1.setControl(toolbar1);
   //     Compute size of tool bar
   Point size = toolbar1.ruputeSize(SWT.DEFAULT, SWT.DEFAULT);
   //     Compute required size of CoolItems instance
   size = coolitem1.ruputeSize(size.x, size.y);
   //     Set size for this CoolItem instance
   coolitem1.setSize(size);
   //     The minimum size of the CoolItem is the width of the first button
   coolitem1.setMinimumSize(toolitem1.getWidth(), size.y);
   //     Create second ToolBar instance
   final ToolBar toolbar2 = new ToolBar(coolbar, SWT.NULL);
   //     Create two radio buttons
   final ToolItem toolitem3a = new ToolItem(toolbar2, SWT.RADIO);
   toolitem3a.setText("Radio");
   toolitem3a.setToolTipText("Radio button a");
   final ToolItem toolitem3b = new ToolItem(toolbar2, SWT.RADIO);
   toolitem3b.setText("Radio");
   toolitem3b.setToolTipText("Radio button b");
   //     Create separator
   new ToolItem(toolbar2, SWT.SEPARATOR);
   //     Create drop-down menu button
   final ToolItem toolitem5 = new ToolItem(toolbar2, SWT.DROP_DOWN);
   toolitem5.setText("Drop-down-Menu");
   //     Add event processing to drop-down menu button
   toolitem5.addSelectionListener(
   // In class DropDownSelectionListener we construct the menu
       new DropDownSelectionListener(composite.getShell()));
   // Create second CoolItem, assing Toolbar to it and set size
   final CoolItem coolitem2 = new CoolItem(coolbar, SWT.NULL);
   coolitem2.setControl(toolbar2);
   size = toolbar2.ruputeSize(SWT.DEFAULT, SWT.DEFAULT);
   size = coolitem2.ruputeSize(size.x, size.y);
   coolitem2.setSize(size);
   coolitem2.setMinimumSize(toolitem3a.getWidth(), size.y);
   return coolbar;
 }
 class DropDownSelectionListener extends SelectionAdapter {
   private Menu menu;
   private Composite parent;
   public DropDownSelectionListener(Composite parent) {
     this.parent = parent;
   }
   public void widgetSelected(final SelectionEvent e) {
     // Create menu lazily
     if (menu == null) {
       menu = new Menu(parent);
       final MenuItem menuItem1 = new MenuItem(menu, SWT.NULL);
       menuItem1.setText("Item1");
       // Set SelectionListener for menuItem1
       menuItem1.addSelectionListener(new SelectionAdapter() {
         public void widgetSelected(SelectionEvent m) {
           processMenuEvent(e, menuItem1);
         }
       });
       menuItem1.addArmListener(new ArmListener() {
         public void widgetArmed(ArmEvent m) {
           System.out.println("Mouse is over menu item 1");
         }
       });
       final MenuItem menuItem2 = new MenuItem(menu, SWT.NULL);
       menuItem2.setText("Item2");
       // Set SelectionListener foYr menuItem1
       menuItem2.addSelectionListener(new SelectionAdapter() {
         public void widgetSelected(SelectionEvent m) {
           processMenuEvent(e, menuItem2);
         }
       });
       menuItem2.addArmListener(new ArmListener() {
         public void widgetArmed(ArmEvent m) {
           System.out.println("Mouse is over menu item 2");
         }
       });
     }
     // Check, if it was the arrow button that was pressed
     if (e.detail == SWT.ARROW) {
       if (menu.isVisible()) {
         // Set visible menu invisible
         menu.setVisible(false);
       } else {
         // Retrieve ToolItem and ToolBar from the event object
         final ToolItem toolItem = (ToolItem) e.widget;
         final ToolBar toolBar = toolItem.getParent();
         // Get position and size of the ToolItem
         Rectangle toolItemBounds = toolItem.getBounds();
         // Convert relative position to absolute position
         Point point = toolBar.toDisplay(new Point(toolItemBounds.x,
             toolItemBounds.y));
         // Set menu position
         menu.setLocation(point.x, point.y + toolItemBounds.height);
         // Make menu visible
         menu.setVisible(true);
       }
     } else {
       final ToolItem toolItem = (ToolItem) e.widget;
       System.out.println("Tool button was pressed: "
           + toolItem.getText());
     }
   }
   private void processMenuEvent(final SelectionEvent e,
       final MenuItem item) {
     // Get text of menu item
     final String s = item.getText();
     // Get ToolItem
     final ToolItem toolItem = (ToolItem) e.widget;
     // Replace ToolItem label with text of the menu item
     toolItem.setText(s);
     // Hide menu
     menu.setVisible(false);
   }
 }
 /** * SashForm ** */
 public static SashForm createSashForm(Shell toplevelShell) {
   //     Create outer SashForm
   SashForm sf1 = new SashForm(toplevelShell, SWT.HORIZONTAL);
   //     Create inner SashForm
   SashForm sf2 = new SashForm(sf1, SWT.VERTICAL);
   //     Create content for vertical SashForm
   List list1 = new List(sf2, SWT.NONE);
   list1.setItems(new String[] { "red", "green", "blue" });
   List list2 = new List(sf2, SWT.NONE);
   list2.setItems(new String[] { "A", "B", "C" });
   //     Apply even weights
   sf2.setWeights(new int[] { 100, 100 });
   //     Create content for horizontal SashForm
   List list3 = new List(sf1, SWT.NONE);
   list3.setItems(new String[] { "one", "two", "three", "four", "five",
       "six" });
   //     Apply uneven weights
   sf1.setWeights(new int[] { 100, 200 });
   return sf1;
 }
 /** * StackLayout ** */
 public static void createStackLayout(Composite composite) {
   //     Neues Composite erzeugen
   final Composite stackComposite = new Composite(composite, SWT.NULL);
   final StackLayout stackLayout = new StackLayout();
   //     Text-Buttons erzeugen
   final Button buttonA = new Button(stackComposite, SWT.PUSH);
   buttonA.setText("Taste A");
   final Button buttonB = new Button(stackComposite, SWT.PUSH);
   buttonB.setText("Taste B");
   //     Auf Klickereignisse reagieren
   buttonA.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       stackLayout.topControl = buttonB;
       //     Neues Layout erzwingen
       stackComposite.layout();
       //     Fokus auf sichtbare Taste setzen
       buttonB.setFocus();
     }
   });
   buttonB.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       stackLayout.topControl = buttonA;
       //     Neues Layout erzwingen
       stackComposite.layout();
       //     Fokus auf sichtbare Taste setzen
       buttonA.setFocus();
     }
   });
   //     Layout initialisieren
   stackLayout.topControl = buttonA;
   stackLayout.marginWidth = 10;
   stackLayout.marginHeight = 5;
   //     Layout setzen
   stackComposite.setLayout(stackLayout);
 }
 /** * PaintListener ** */
 public static void addPaintListener(Composite composite) {
   composite.addPaintListener(new PaintListener() {
     public void paintControl(PaintEvent event) {
       // Get Display intsance from event object
       Display display = event.display;
       // Get a green system color object - we don"t
       // need to dispose that
       Color green = display.getSystemColor(SWT.COLOR_DARK_GREEN);
       // Get the graphics context from the event object
       GC gc = event.gc;
       // Set line color
       gc.setForeground(green);
       // Get size of the Composite"s client area
       Rectangle rect = ((Composite) event.widget).getClientArea();
       // Now draw an rectangle
       gc.drawRectangle(rect.x + 2, rect.y + 2, rect.width - 4,
           rect.height - 4);
     }
   });
 }
 /** * Fonts ** */
 public static void drawItalic(Composite composite, GC gc) {
   //     Get Display instance
   Display display = composite.getDisplay();
   //     Fetch system font
   Font systemFont = display.getSystemFont();
   //     FontData objects contain the font properties.
   //     With some operating systems a font may possess multiple
   //     FontData instances. We only use the first one.
   FontData[] data = systemFont.getFontData();
   FontData data0 = data[0];
   //     Set the font style to italic
   data0.setStyle(SWT.ITALIC);
   //     Create a new font
   Font italicFont = new Font(display, data0);
   //     Set the new font in the graphics context
   gc.setFont(italicFont);
   //     TODO: call italicFont.dispose() in the DisposeListener
   //     of composite
   //     Draw text at position (4,4) with a transparent background (true).
   gc.drawText("Hello", 4, 4, true);
 }
 /** * Images ** */
 public static void doubleBuffering(Composite composite) {
   //     Create canvas
   final Canvas canvas = new Canvas(composite, SWT.BORDER);
   //     Get white system color
   Color white = canvas.getDisplay().getSystemColor(SWT.COLOR_WHITE);
   //     Set canvas background to white
   canvas.setBackground(white);
   //     Add paint listener
   canvas.addPaintListener(new PaintListener() {
     public void paintControl(PaintEvent e) {
       // Get Display instance from the event object
       Display display = e.display;
       // Get black and red system color - don"t dispose these
       Color black = display.getSystemColor(SWT.COLOR_BLACK);
       Color red = display.getSystemColor(SWT.COLOR_RED);
       // Get the graphics context from event object
       GC gc = e.gc;
       // Get the widget that caused the event
       Composite source = (Composite) e.widget;
       // Get the size of this widgets client area
       Rectangle rect = source.getClientArea();
       // Create buffer for double buffering
       Image buffer = new Image(display, rect.width, rect.height);
       // Create graphics context for this buffer
       GC bufferGC = new GC(buffer);
       // perform drawing operations
       bufferGC.setBackground(red);
       bufferGC.fillRectangle(5, 5, rect.width - 10, rect.height - 10);
       bufferGC.setForeground(black);
       bufferGC.drawRectangle(5, 5, rect.width - 10, rect.height - 10);
       bufferGC.setBackground(source.getBackground());
       bufferGC.fillRectangle(10, 10, rect.width - 20,
           rect.height - 20);
       // Now draw the buffered image to the target drawable
       gc.drawImage(buffer, 0, 0);
       // Dispose of the buffer"s graphics context
       bufferGC.dispose();
       // Dispose of the buffer
       buffer.dispose();
     }
   });
 }
 /** * Printing ** */
 public static void createPrintButton(final Composite composite) {
   //     Create button for starting printing process
   final Button printButton = new Button(composite, SWT.PUSH);
   printButton.setText("Print");
   //     React to clicks
   printButton.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       // Get Shell instance
       Shell shell = composite.getShell();
       // Create printer selection dialog
       PrintDialog printDialog = new PrintDialog(shell);
       // and open it
       PrinterData printerData = printDialog.open();
       // Check if OK was pressed
       if (printerData != null) {
         // Create new Printer instance
         Printer printer = new Printer(printerData);
         // Create graphics context for this printer
         GC gc = new GC(printer);
         // Open printing task
         if (!printer.startJob("Hello"))
           System.out.println("Starting printer task failed");
         else {
           // Print first page
           if (!printer.startPage())
             System.out.println("Printing of page 1 failed");
           else {
             // Get green system color from printer
             // and set it as text color
             Color green = printer
                 .getSystemColor(SWT.COLOR_DARK_GREEN);
             gc.setForeground(green);
             // Draw text
             gc.drawText("Hello World", 4, 4, true);
             // Close page
             printer.endPage();
           }
           // Print second page
           if (!printer.startPage())
             System.out.println("Printing of page 2 failed");
           else {
             // Get blue system color from printer
             // and set it as text color
             Color blue = printer.getSystemColor(SWT.COLOR_BLUE);
             gc.setForeground(blue);
             // Draw text
             gc.drawText("Hello Eclipse", 4, 4, true);
             // Close page
             printer.endPage();
           }
           // Close printing task
           printer.endJob();
         }
         // Release operating system resources
         gc.dispose();
         printer.dispose();
       }
     }
   });
 }

}


      </source>