关于在JAVA中实现套打
/**
Program Name: PrintJob.java
Author: 罗政
Purpose: 实现java套打.
Copyright 2002, developer_luozheng
*/
import java.awt.*;
import java.awt.print.*;
import java.awt.font.FontRenderContext;
import javax.swing.*;
import java.awt.print.Pageable;
public class PrintJob implements Printable {
private int PAGES=0;
private int columns_Index=1;
private String[][] printPageText;
private Accessdatabase printObject=new Accessdatabase();
/**Graphics指明打印的图形环境;
*PageFormat指明打印页格式(页面大小以点为计量单位,
*1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点);
*page指明页号
*/
public int print(Graphics g, PageFormat pf, int page) throws PrinterException{
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.black); //设置打印颜色为黑色
/*if(rect.width>rect.height)//重新设置剪切矩形,以反映纸张是横向打印的.
pf.setOrientation(pf.LANDSCAPE);
g2.setClip((int)pf.getImageableX(),
(int)pf.getImageableY(),
(int)pf.getImageableWidth(),
(int)pf.getImageableHeight());*/
//System.out.print("page=:"+page);
//System.out.print("PAGES="+PAGES);
if (page >=PAGES) //当打印页号大于需要打印的总页数时,打印工作结束
return Printable.NO_SUCH_PAGE;
/*getImageableX(),getImageableY(),返回可打印区域左上角的X和Y坐标.
getImageableWidth(),getImageableHeight(),返回可打印区域宽度和高度.
*/
System.out.print("X="+pf.getImageableX()+"Y="+pf.getImageableY()+"Width="+pf.getImageableWidth()+"heigth="+pf.getImageableHeight()+"\n");
g2.translate(pf.getImageableX(), pf.getImageableY());//转换坐标,确定打印边界
// g2.translate(130,130);
// g2.scale(0.5,0.5);//设置比例因子,将按此比列打印超大图形.
drawCurrentPageText(g2, pf, page); //调用drawCurrentPageText()打印当前页文本
return Printable.PAGE_EXISTS; //存在打印页时,继续打印工作
}
/*打印指定页号的具体文本内容*/
private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page)
{
//注意此处数据是从访问数据库的javaBean中获得.
String c_id =printPageText[page+1][1];
String c_type =printPageText[page+1][2];
String w_cause=printPageText[page+1][3];
String h_money=printPageText[page+1][4];
String w_date =printPageText[page+1][5];
// System.out.print("当前页的待打印文本内容:\n");
//获取默认字体及相应的尺寸
//FontRenderContext context = g2.getFontRenderContext();
//Font f = area.getFont();
// g2.drawLine(0,0,453,0);
//g2.drawLine(0,8,500,8);
// g2.drawLine(0,16,800,16);
g2.drawString(c_id,30,30);
g2.drawString(c_type,120,30);
g2.drawString(w_cause,180,30);
g2.drawString(h_money,30,90);
g2.drawString(w_date,100,90);//具体打印每一行文本,同时走纸移位
}
//完成具体的打印操作
public void printTextAction(String sql)
{
printObject.connectiondatabase(sql);
printPageText=printObject.getArr();//连结数据库获得打印内容.
//PrintJob a=new PrintJob();
PAGES=printPageText.length-1;//查看打印内容是否为空.
if (printPageText.length>0&&printPageText.length!=1) //当打印内容不为空时
{
//PAGES = getPagesCount(printStr); //获取打印总页数
// System.out.print("打印总页数="+PAGES+"\n");
PrinterJob myPrtJob = PrinterJob.getPrinterJob(); //获取默认打印作业
PageFormat pageFormat = myPrtJob.defaultPage(); //获取默认打印页面格式
/* PageFormat pageFormat=myPrtJob.validatePage(new PageFormat());
Paper paper=pageFormat.getPaper();
paper.setSize(300,200);
pageFormat.setPaper(paper);*///生成新的页面属性
//pageFormat=myPrtJob.pageDialog(pageFormat);//进行页面设置的对话框
/*if(rect.width>rect.height)
pageFormat.setOrientation(pageFormat.LANDSCAPE);//设置横向打印,注意须在print()方法中实现setClip()*/
myPrtJob.setPrintable(this, pageFormat); //设置打印工作
if (myPrtJob.printDialog()) //显示打印对话框
{
try
{
myPrtJob.print(); //进行每一页的具体打印操作
}
catch(PrinterException pe)
{
pe.printStackTrace();
}
}
}
else
{
//如果打印内容为空时,提示用户打印将取消
System.out.print("如果打印内容为空时,提示用户打印将取消\n") ;
JOptionPane.showConfirmDialog
(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);
}
}
// 计算需要打印的总页数
public int getPagesCount( )
{
int PAGES1;
PAGES1=printObject.getRows();
return PAGES1;
}
}