java打印的资料本来就很少 做了个小例子 共大家用
import java.awt.print.*;
import java.awt.*;
import javax.print.*;
import javax.print.attribute.*;
import javax.swing.*;
import javax.swing.table.*;
class PrintReport implements Printable{
private TableModel table;
private String title;
public PrintReport(JTable table,String title){
this.table=table.getModel();
this.title=title;
PrintService[] services=PrintServiceLookup.lookupPrintServices(
DocFlavor.SERVICE_FORMATTED.PRINTABLE,null
);
PrintRequestAttributeSet attributes=new HashPrintRequestAttributeSet();
PrintService service=ServiceUI.printDialog(null,50,50,services,services[0],null,attributes);
if(service!=null){
DocPrintJob job=service.createPrintJob(); //此接口表示了一个可使用作业属性集打印指定文档的打印作业。可从 PrintService 获得一个实现了此接口的对象
try{
Doc doc=new SimpleDoc(this,DocFlavor.SERVICE_FORMATTED.PRINTABLE,null);
job.print(doc,attributes);
}catch(PrintException pe){
pe.printStackTrace();
}
}
}
public int print(Graphics g,PageFormat pf,int pageIndex){
Paper p=new Paper();
p.setSize(9.488189,3.6220472);
pf.setPaper(p);
if(pageIndex==0){
Graphics2D g2d=(Graphics2D)g;
g2d.translate(pf.getImageableX(),pf.getImageableY());
g2d.setColor(Color.black);
g2d.drawString(title,200,10);
g2d.drawString("购物单位:",20,20);
g2d.drawString("库房:",250,20);
g2d.drawString("结算方式:",350,20);
g2d.drawLine(0, 25, 600, 25);
for(int i=0;i<table.getColumnCount();i++){
g2d.drawString(table.getColumnName(i),i*100,40);
}
for(int i=0;i<table.getRowCount();i++){
for(int ii=0;ii<table.getColumnCount();ii++){
String cell;
Object original=table.getValueAt(i,ii);
if(original==null) cell="";
else cell=original.toString();
g2d.drawString(cell,ii*100,60+i*20);
}
}
return Printable.PAGE_EXISTS;
}else return Printable.NO_SUCH_PAGE;
}
}