exportprinter.java

来自「用Java开发的、实现类似Visio功能的应用程序源码」· Java 代码 · 共 127 行

JAVA
127
字号

/**
 *    $Id: ExportPrinter.java $
 *
 *    Copyright 2004 ~ 2005 JingFei International Cooperation LTD. All rights reserved.
 *
 */
package com.jfimagine.jfgraph.transfer;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.RenderingHints;

import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;


import com.jfimagine.jfgraph.shape.union.JFPage;
import com.jfimagine.jfgraph.shape.decorate.JFPageFormat;
import com.jfimagine.jfgraph.geom.Rect;

import com.jfimagine.utils.log.*;

 /**
 * ExportPrinter class is used to print current page or list to printer.
 *
 * @author     CookieMaker    
 *
 * @version $Revision: 1.3.0 $
 */ 
 
public class ExportPrinter extends ExportBase implements Printable {

	/**an internal log utility*/
	private JFLogger m_logger=JFLogManager.getLogger(this.getClass());	
	
	/** current tiled printing page index */
	private int m_pageIndex=0;      
      
   	/** 
    	*  Export current page or list to a specified output.
    	*/
   	public boolean export(){
   		prepareExport();
		print();   		
   		return true;
	}        

 
  	/** A major method to start printing graphs.*/
  	public void print() {
    		PrinterJob printJob = PrinterJob.getPrinterJob();
    		printJob.setJobName("JFDraw Document");

    		if (printJob.printDialog()){
      			try {
                                int copies	=printJob.getCopies();
    				switch (getOutputType()){
    					case OUTPUTTYPE_PAGE:
    						try{
    							for (int i=1; i<=copies; i++){
    								int totalPage	=getOutputPage().getTiledPageCount();
    								for (m_pageIndex=0; m_pageIndex<totalPage; m_pageIndex++){
    									printJob.setPrintable(this,getOutputPage().getPage().getPageFormat().getPageFormat());
		        						printJob.print();
		        					}
		        				}
		        			}catch(Exception e){
		        			}
    						break;
    					case OUTPUTTYPE_LIST:
    						//create a default page format
    						for (int i=1; i<copies; i++){
    							printJob.setPrintable(this,new PageFormat());
        						printJob.print();
        					}
    						break;
    				}
    		
      			} catch(PrinterException pe) {
      				m_logger.error("Error printing: " + pe);
      			}
      		}
  	}


  	public int print(Graphics g,PageFormat pageFormat, int pageIndex) {
    		if (pageIndex > 0) {
      			return(NO_SUCH_PAGE);
    		} else {
      			Graphics2D g2d = (Graphics2D)g;
        		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
                                  			
      			g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    			switch (getOutputType()){
    				case OUTPUTTYPE_PAGE:
  					
					//get the rectangular area for each tiled page.	
        				Rect rect		=getOutputPage().getTiledPageArea(m_pageIndex);
					int x	=(int)rect.getX();
					int y	=(int)rect.getY();
					int w	=(int)rect.getWidth();
					int h	=(int)rect.getHeight();
					
					g2d.translate(-x,-y);
					m_outputPage.draw(g2d);
					
					g2d.clip(new java.awt.Rectangle(0,0,w,h));
					
					
      					break;

      				case OUTPUTTYPE_LIST:
      					draw(g2d);
      					break;
      			}
      			return(PAGE_EXISTS);
    		}
  	}

	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?