六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 154|回复: 0

SWT中打印图片、图像

[复制链接]

升级  41.33%

28

主题

28

主题

28

主题

秀才

Rank: 2

积分
112
 楼主| 发表于 2013-2-7 20:39:02 | 显示全部楼层 |阅读模式
本文转载自:http://www.blogjava.net/Javawind/articles/129899.html
//Send questions, comments, bug reports, etc. to the authors://Rob Warner (rwarner@interspatial.com)//Robert Harris (rbrt_harris@yahoo.com)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.computeTrim(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();    }  }} 和打印文字不同。因为系统中的dpi(dot per inch)和打印机的dpi不同,所以要进行转换。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表