001: /*
002: *
003: * Copyright (c) 2000 Silvere Martin-Michiellot All Rights Reserved.
004: *
005: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
006: * royalty free, license to use, modify and redistribute this
007: * software in source and binary code form,
008: * provided that i) this copyright notice and license appear on all copies of
009: * the software; and ii) Licensee does not utilize the software in a manner
010: * which is disparaging to Silvere Martin-Michiellot.
011: *
012: * This software is provided "AS IS," without a warranty of any kind. ALL
013: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
014: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
015: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
016: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
017: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
018: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
019: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
020: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
021: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
022: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
023: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
024: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
025: *
026: * This software is not designed or intended for use in on-line control of
027: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
028: * the design, construction, operation or maintenance of any nuclear
029: * facility. Licensee represents and warrants that it will not use or
030: * redistribute the Software for such purposes.
031: *
032: *
033: */
034:
035: package com.db.media.print;
036:
037: // This code is repackaged after the code from the Java3D SDK
038: // Site http://java.sun.com/
039: // Email java3d-interest@java.sun.com (mailing list)
040:
041: import java.awt.print.*;
042: import java.awt.Graphics;
043: import java.awt.Graphics2D;
044: import java.awt.Image;
045: import java.awt.image.BufferedImage;
046: import java.awt.image.ImageObserver;
047: import java.awt.geom.AffineTransform;
048:
049: public class ImagePrinter implements Printable, ImageObserver {
050:
051: BufferedImage bImage;
052:
053: public ImagePrinter(BufferedImage bImage) {
054:
055: this .bImage = bImage;
056:
057: }
058:
059: public int print(Graphics g, PageFormat pageFormat, int printIndex)
060: throws PrinterException {
061:
062: if (printIndex >= 1) {
063: return Printable.NO_SUCH_PAGE;
064: }
065:
066: Graphics2D g2d = (Graphics2D) g;
067: //g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
068: AffineTransform t2d = new AffineTransform();
069: t2d.translate(pageFormat.getImageableX(), pageFormat
070: .getImageableY());
071: double xscale = pageFormat.getImageableWidth()
072: / (double) bImage.getWidth();
073: double yscale = pageFormat.getImageableHeight()
074: / (double) bImage.getHeight();
075: double scale = Math.min(xscale, yscale);
076: t2d.scale(scale, scale);
077: try {
078: g2d.drawImage(bImage, t2d, this );
079: } catch (Exception exception) {
080: exception.printStackTrace();
081: return Printable.NO_SUCH_PAGE;
082: }
083: return Printable.PAGE_EXISTS;
084:
085: }
086:
087: public void print() {
088:
089: PrinterJob printerJob = PrinterJob.getPrinterJob();
090: PageFormat pageFormat = printerJob.defaultPage();
091: pageFormat.setOrientation(PageFormat.LANDSCAPE);
092: pageFormat = printerJob.validatePage(pageFormat);
093: printerJob.setPrintable(this , pageFormat);
094: if (printerJob.printDialog()) {
095: try {
096: printerJob.print();
097: } catch (PrinterException exception) {
098: exception.printStackTrace();
099: }
100: }
101:
102: }
103:
104: public boolean imageUpdate(Image img, int infoflags, int x, int y,
105: int width, int height) {
106:
107: return false;
108:
109: }
110:
111: }
|