jinfeng_wang

          G-G-S,D-D-U!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
          import java.awt.*;
          import java.awt.print.*;
          import java.io.*;

          /**
          * Utility class to print some lines of text to the default printer. Uses some
          * default font settings, and gets the page size from the PrinterJob object.
          *
          * Note: this little example class does not handle pagination. All the text must
          * fit on a single page.
          *
          * This class can also be used as a standalone utility. If the main method is
          * invoked, it reads lines of text from System.in, and prints them to the
          * default printer.
          */

          public class PrintGIF implements Printable {
          /**
          * Default font size, 12 point
          */
          public static final int DEFAULT_FONT_SIZE = 12;

          /**
          * Default type name, Serif
          */
          public static final String DEFAULT_FONT_NAME = "Serif";

          private PrinterJob job;

          private String typeName;

          private int typeSize;

          private Font typeFont;

          private Font typeFontBold;

          private String[] header;

          private String[] body;

          /**
          * Create a TextPrinter object with the default type font and size.
          */
          public PrintGIF() {
          this(DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE);
          }

          /**
          * Create a TextPrinter object ready to print text with a given font and
          * type size.
          */
          public PrintGIF(String name, int size) {
          if (size < 3 || size > 127) {
          throw new IllegalArgumentException("Type size out of range");
          }
          typeName = name;
          typeSize = size;
          typeFont = new Font(typeName, Font.PLAIN, typeSize);
          typeFontBold = new Font(typeName, Font.BOLD, typeSize);
          job = null;
          }

          /**
          * Initialize the printer job.
          */
          protected void init() {
          job = PrinterJob.getPrinterJob();
          }

          /**
          * Initialize the print job, and return the base number of characters per
          * line with the established font size and font. This is really just a
          * guess, because we can't get the font metrics yet.
          */
          public int getCharsPerLine() {
          if (job == null) {
          init();
          }
          PageFormat pf;
          pf = job.defaultPage();
          double width = pf.getImageableWidth(); // in 72nd of a pt
          double ptsize = typeFont.getSize();
          double ptwid = ptsize * 3 / 4;
          double cnt = (width / ptwid);
          return (int) (Math.round(cnt));
          }

          /**
          * Print some text. Headers are printed first, in bold, followed by the body
          * text, in plain style. If the boolean argument interactive is set to true,
          * then the printer dialog gets shown.
          *
          * Either array may be null, in which case they are treated as empty.
          *
          * This method returns true if printing was initiated, or false if the user
          * cancelled printer. This method may throw PrinterException if printing
          * could not be started.
          */
          public boolean doPrint(String[] header, String[] body, boolean interactive)
          throws PrinterException {
          if (job == null) {
          init();
          }
          if (interactive)
          try {
          if (job.printDialog()) {
          // we are going to print
          } else {
          // we are not going to print
          return false;
          }
          } catch (Exception pe) {
          System.err.println("Could not pop up print dialog");
          // assume user wants to print anyway...
          }

          job.setPrintable(this);
          this.header = header;
          this.body = body;
          job.print();
          job = null; // we are no longer initialized
          return true;
          }

          /**
          * Perform printing according to the Java printing model. NEVER CALL THIS
          * DIRECTLY! It will be called by the PrinterJob as necessary. This method
          * always returns Printable.NO_SUCH_PAGE for any page number greater than 0.
          */
          public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
          throws PrinterException {
          if (pageIndex != 0) {
          return NO_SUCH_PAGE;
          }
          FontMetrics fm;
          graphics.setFont(typeFont);
          graphics.setColor(Color.black);
          fm = graphics.getFontMetrics();

          // fill in geometric and rendering guts here
          int i;
          double x, y;
          x = pageFormat.getImageableX();
          y = pageFormat.getImageableY() + fm.getMaxAscent();

          // do the headings
          if (header != null) {
          graphics.setFont(typeFontBold);
          for (i = 0; i < header.length; i++) {
          graphics.drawString(header[i], (int) x, (int) y);
          y += fm.getHeight();
          }
          }

          // do the body
          if (body != null) {
          graphics.setFont(typeFont);
          for (i = 0; i < body.length; i++) {
          graphics.drawString(body[i], (int) x, (int) y);
          y += fm.getHeight();
          }
          }

          return PAGE_EXISTS;
          }

          /**
          * Main method for testing. This main method sets up a header of
          * "PRINTER TEST" and reads System.in to get body text.
          */
          public static void main(String[] args) {
          BufferedReader br;
          java.util.List lines;

          TextPrinter tp;
          tp = new TextPrinter();
          lines = new java.util.ArrayList();
          try {
          InputStreamReader isr;
          isr = new InputStreamReader(System.in);
          br = new BufferedReader(isr);
          String line;
          for (line = br.readLine(); line != null; line = br.readLine()) {
          lines.add(line);
          }
          br.close();

          System.out.println("chars per line: " + tp.getCharsPerLine());
          System.out.println("attempting to print...");
          String[] headers = new String[1];
          headers[0] = "PRINT TEST";
          String[] body = new String[lines.size()];
          for (int ix = 0; ix < lines.size(); ix++) {
          body[ix] = (String) (lines.get(ix));
          }
          boolean didit = tp.doPrint(headers, body, true);
          System.out.println("doPrint returns " + didit);
          } catch (Exception e) {
          System.err.println("Error printing: " + e);
          e.printStackTrace();
          }
          }
          }














          posted on 2008-08-05 17:13 jinfeng_wang 閱讀(275) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 元谋县| 乌海市| 荔波县| 卓尼县| 泸水县| 新巴尔虎右旗| 岐山县| 广南县| 洛隆县| 陇南市| 肃北| 兴义市| 旬邑县| 嘉禾县| 济南市| 台东市| 麻江县| 龙岩市| 虎林市| 白水县| 嵊州市| 甘肃省| 东平县| 石家庄市| 九寨沟县| 乾安县| 开江县| 新闻| 长汀县| 洛南县| 临西县| 湘潭市| 儋州市| 普洱| 繁峙县| 龙江县| 二连浩特市| 香格里拉县| 灵台县| 千阳县| 襄樊市|