用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Graphics2D直接输出直接输出。
下面代码实现了简单的打印功能:
-
import java.awt.BasicStroke;
-
-
import java.awt.Color;
-
-
import java.awt.Component;
-
-
import java.awt.Font;
-
-
import java.awt.Graphics;
-
-
import java.awt.Graphics2D;
-
-
import java.awt.Image;
-
-
-
-
import java.awt.Toolkit;
-
-
import java.awt.RenderingHints;
-
-
import java.awt.font.FontRenderContext;
-
-
import java.awt.font.LineBreakMeasurer;
-
-
import java.awt.font.TextAttribute;
-
-
import java.awt.font.TextLayout;
-
-
import java.awt.geom.Point2D;
-
-
import java.awt.image.BufferedImage;
-
-
import java.awt.print.Book;
-
-
import java.awt.print.PageFormat;
-
-
import java.awt.print.Paper;
-
-
import java.awt.print.Printable;
-
-
import java.awt.print.PrinterException;
-
-
import java.awt.print.PrinterJob;
-
-
import java.text.AttributedString;
-
-
-
-
import javax.swing.JApplet;
-
-
-
-
-
-
-
-
-
-
public class PrintTest implements Printable{
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {
-
-
System.out.println("pageIndex="+pageIndex);
-
-
Component c = null;
-
-
-
-
String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";
-
-
-
-
Graphics2D g2 = (Graphics2D) gra;
-
-
-
-
g2.setColor(Color.black);
-
-
-
-
-
-
double x = pf.getImageableX();
-
-
double y = pf.getImageableY();
-
-
-
-
-
-
switch(pageIndex){
-
-
case 0:
-
-
-
-
-
-
Font font = new Font("新宋体", Font.PLAIN, 9);
-
-
g2.setFont(font);
-
-
-
-
-
-
float[] dash1 = {2.0f};
-
-
-
-
-
-
g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));
-
-
-
-
float heigth = font.getSize2D();
-
-
System.out.println("x="+x);
-
-
-
-
-
-
-
-
-
-
Image src = Toolkit.getDefaultToolkit().getImage("D:\\EclipseWorkSpace3.1\\Kfc-wuxi\\WebRoot\\image\\KFC.jpg");
-
-
g2.drawImage(src,(int)x,(int)y,c);
-
-
int img_Height=src.getHeight(c);
-
-
int img_width=src.getWidth(c);
-
-
-
-
-
-
g2.drawString(str, (float)x, (float)y+1*heigth+img_Height);
-
-
g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));
-
-
-
-
g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);
-
-
-
-
return PAGE_EXISTS;
-
-
default:
-
-
return NO_SUCH_PAGE;
-
-
}
-
-
-
-
}
-
-
-
-
-
-
-
-
public static void main(String[] args) {
-
-
-
-
-
-
Book book = new Book();
-
-
-
-
PageFormat pf = new PageFormat();
-
-
pf.setOrientation(PageFormat.PORTRAIT);
-
-
-
-
Paper p = new Paper();
-
-
p.setSize(590,840);
-
-
p.setImageableArea(10,10, 590,840);
-
-
pf.setPaper(p);
-
-
-
-
book.append(new PrintTest(), pf);
-
-
-
-
-
-
PrinterJob job = PrinterJob.getPrinterJob();
-
-
-
-
job.setPageable(book);
-
-
-
-
-
-
try {
-
-
-
-
-
-
-
-
-
-
job.print();
-
-
-
-
-
-
} catch (PrinterException e) {
-
-
e.printStackTrace();
-
-
}
-
-
}
-
-
}
-
这个例子实现了打印字符串,线(包括虚线)和打印图片。而且通过Paper的setImageableArea可以设置打印的区域和边距,让开发者随意的设置打印的位置。
-
下面的打印代码没有设置打印区域,默认为打印纸张的区域和边距,比如我们一般用的A4纸,打印的起点X和Y坐标则是72,72。
-
无区域设置的代码:
-
-
import java.awt.BasicStroke;
-
-
import java.awt.Color;
-
-
import java.awt.Component;
-
-
import java.awt.Font;
-
-
import java.awt.Graphics;
-
-
import java.awt.Graphics2D;
-
-
import java.awt.Image;
-
-
-
-
import java.awt.Toolkit;
-
-
import java.awt.RenderingHints;
-
-
import java.awt.font.FontRenderContext;
-
-
import java.awt.font.LineBreakMeasurer;
-
-
import java.awt.font.TextAttribute;
-
-
import java.awt.font.TextLayout;
-
-
import java.awt.geom.Point2D;
-
-
import java.awt.image.BufferedImage;
-
-
import java.awt.print.Book;
-
-
import java.awt.print.PageFormat;
-
-
import java.awt.print.Paper;
-
-
import java.awt.print.Printable;
-
-
import java.awt.print.PrinterException;
-
-
import java.awt.print.PrinterJob;
-
-
import java.text.AttributedString;
-
-
-
-
import javax.swing.JApplet;
-
-
-
-
-
-
-
-
-
-
public class PrintTest1 implements Printable{
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {
-
-
System.out.println("pageIndex="+pageIndex);
-
-
Component c = null;
-
-
-
-
String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";
-
-
-
-
Graphics2D g2 = (Graphics2D) gra;
-
-
-
-
g2.setColor(Color.black);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
double x = pf.getImageableX();
-
-
double y = pf.getImageableY();
-
-
-
-
-
-
switch(pageIndex){
-
-
case 0:
-
-
-
-
-
-
Font font = new Font("新宋体", Font.PLAIN, 9);
-
-
g2.setFont(font);
-
-
-
-
-
-
float[] dash1 = {4.0f};
-
-
g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 4.0f, dash1, 0.0f));
-
-
-
-
float heigth = font.getSize2D();
-
-
System.out.println("x="+x);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Image src = Toolkit.getDefaultToolkit().getImage("d://logo.gif");
-
-
g2.drawImage(src,(int)x,(int)y,c);
-
-
int img_Height=src.getHeight(c);
-
-
int img_width=src.getWidth(c);
-
-
-
-
-
-
g2.drawString(str, (float)x, (float)y+1*heigth+img_Height);
-
-
g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));
-
-
-
-
g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
return PAGE_EXISTS;
-
-
default:
-
-
return NO_SUCH_PAGE;
-
-
}
-
-
-
-
}
-
-
-
-
-
-
-
-
public static void main(String[] args) {
-
-
-
-
-
-
PrinterJob job = PrinterJob.getPrinterJob();
-
-
PageFormat pageFormat = job.defaultPage();
-
-
job.setPrintable(new PrintTest1());
-
-
-
-
-
-
try {
-
-
-
-
-
-
-
-
-
-
-
-
job.print();
-
-
-
-
-
-
} catch (PrinterException e) {
-
-
e.printStackTrace();
-
-
}
-
-
}
-
-
}