📄 printer.java
字号:
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.print.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.print.Book.*;
import java.sql.*;
public class Printer extends JFrame implements ActionListener
{
JDesktopPane JDesktop=new JDesktopPane();
Vector objects=new Vector();
JButton printBtt,pageSetupBtt,printPreviewBtt,nextBtt,preBtt;
PageFormat pageFormat;
Font tabFont=new Font("MonoSpaced",Font.PLAIN,12);
JLabel lblVisible;
Label lblPageInfo;
printPreviewCanvas canvas;
JScrollPane js;
int pageCount=0;
public Printer(String orientation,double paperWidth,double paperHeight)
{
super("信息打印");
if (pageFormat==null)pageFormat=(PrinterJob.getPrinterJob()).defaultPage();
if (orientation.equals("H"))pageFormat.setOrientation(PageFormat.REVERSE_LANDSCAPE);
else pageFormat.setOrientation(PageFormat.PORTRAIT);
Paper p=new Paper();
p.setSize(paperWidth/2.54*80,paperHeight/2.54*80);
p.setImageableArea(80,80,paperWidth/2.54*80-144,paperHeight/2.54*80-144);
pageFormat.setPaper(p);
addComponent();
}
public Printer()
{
super("信息打印");
if (pageFormat==null)pageFormat=(PrinterJob.getPrinterJob()).defaultPage();
addComponent();
}
public void addComponent()
{
// putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
setSize(1010,750);
JDesktop.setLayout(null);
Container c=getContentPane();
c.add(JDesktop);
//try{setMaximum(true);}catch(Exception e){}
JPanel bttPanel=new JPanel();
bttPanel.setBorder(BorderFactory.createLineBorder(Color.black));
/*pageSetupBtt=new JButton(" ",new ImageIcon("pagesetup.gif"));
printBtt=new JButton(" ",new ImageIcon("print.gif"));
printPreviewBtt=new JButton(" ",new ImageIcon("preview.gif"));
cmdBig=new JButton(" ",new ImageIcon("zoomout.gif"));
cmdSmall=new JButton(" ",new ImageIcon("zoomin.gif"));
preBtt=new JButton(" ",new ImageIcon("pre.gif"));
nextBtt=new JButton(" ",new ImageIcon("next.gif"));*/
pageSetupBtt=new JButton("打印设置");
printBtt=new JButton("打印");
printPreviewBtt=new JButton("查看打印内容");
//cmdBig=new JButton("ZoomOut");
//cmdSmall=new JButton("ZoomIn");
preBtt=new JButton("上一页");
nextBtt=new JButton("下一页");
//cmdExit=new JButton("返回");
lblVisible=new JLabel("");
pageSetupBtt.setMnemonic('s');
printBtt.setMnemonic('p');
printPreviewBtt.setMnemonic('v');
//cmdBig.setMnemonic('=');
//cmdSmall.setMnemonic('-');
preBtt.setMnemonic(',');
nextBtt.setMnemonic('.');
//cmdExit.setMnemonic('x');
lblPageInfo=new Label("页/码");
bttPanel.add(lblPageInfo);
bttPanel.add(pageSetupBtt);
bttPanel.add(printPreviewBtt);
//bttPanel.add(cmdBig);
//bttPanel.add(cmdSmall);
bttPanel.add(preBtt);
bttPanel.add(nextBtt);
bttPanel.add(printBtt);
//bttPanel.add(cmdExit);
JDesktop.add(lblVisible);
JDesktop.add(bttPanel);
lblVisible.setBounds(0,0,0,0);
JMenuBar menubar=new JMenuBar();
setJMenuBar(menubar);
menubar.add(bttPanel);
//cmdBig.addActionListener(this);
//cmdSmall.addActionListener(this);
printPreviewBtt.addActionListener(this);
pageSetupBtt.addActionListener(this);
printBtt.addActionListener(this);
//cmdExit.addActionListener(this);
preBtt.addActionListener(this);
nextBtt.addActionListener(this);
bttEnable(false);
this.addWindowListener(new WindowAdapter(){
public void WindowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void printGroup(String strSQL,
int FieldMaxLength[],String FieldName[],
String FieldLabel[],Font font)
{
println();
int currentTab=0;
for(int i=0;i<FieldLabel.length;i++)
{
tab(currentTab);
print(FieldLabel[i],font);
currentTab=currentTab+FieldMaxLength[i]/2+5;
}
println();
printLine(1000);
println();
try{
Class.forName(Yewu.forName);
Connection con1=DriverManager.getConnection(Yewu.jdbc);
//Class.forName(Yewu.forName);
//Connection con1=DriverManager.getConnection("jdbc:odbc:"+db,uid,pwd);
Statement stmt=con1.createStatement();
ResultSet rs=stmt.executeQuery(strSQL);
int to=1;
while (rs.next())
{
currentTab=0;
tab(currentTab);
print(""+to++,font);
currentTab=6;
for(int i=0;i<FieldName.length;i++)
{
String str=rs.getString(FieldName[i]);
if (str==null)str="";
tab(currentTab);
print(str,font);
currentTab=currentTab+FieldMaxLength[i+1]/2+5;
}
println();
}
stmt.close();
con1.close();
}catch(Exception e){System.out.print(e.getMessage());}
}
public void bttEnable(boolean b)
{
//cmdSmall.setEnabled(b);
//cmdBig.setEnabled(b);
preBtt.setEnabled(b);
nextBtt.setEnabled(b);
printPreviewBtt.setEnabled(!b);
}
public Book makeBook(String act)
{
Book book=new Book();
drawOut drawout=new drawOut(objects,act);
pageCount=drawout.getPageCount((Graphics2D)lblVisible.getGraphics(),pageFormat);
if (pageCount<=1){nextBtt.setEnabled(false);preBtt.setEnabled(false);}
book.append(drawout,pageFormat,pageCount);
return book;
}
public void actionPerformed(ActionEvent event)
{
Object obj=event.getSource();
//if (obj==cmdExit){dispose();}
if (obj==printBtt)
{
PrinterJob printJob=PrinterJob.getPrinterJob();
printJob.setPageable(makeBook("print"));
if (printJob.printDialog()){try{printJob.print();}catch(Exception ee){}}
}
else if(obj==pageSetupBtt)
{
PrinterJob printJob=PrinterJob.getPrinterJob();
if(pageFormat==null)pageFormat=printJob.defaultPage();
pageFormat=printJob.pageDialog(pageFormat);
try{
JDesktop.remove(js);
if (!printPreviewBtt.isEnabled())
{
JDesktop.repaint();
showCanvas();
}
}catch(Exception e){}
}
else if (obj==nextBtt){
preBtt.setEnabled(true);
int currentPage=canvas.filpPage(1)+1;
if (currentPage==pageCount)nextBtt.setEnabled(false);
lblPageInfo.setText(currentPage+" of "+pageCount);
}
else if (obj==preBtt){
nextBtt.setEnabled(true);
int currentPage=canvas.filpPage(-1)+1;
if (currentPage==1){preBtt.setEnabled(false);nextBtt.requestFocus();}
lblPageInfo.setText(currentPage+" of "+pageCount);
}
else if (obj==printPreviewBtt)showCanvas();
//else if (obj==cmdBig)canvasResize(10);
//else if (obj==cmdSmall)canvasResize(-10);
}
public void canvasResize(int i)
{
try{
int h=canvas.getHeight()*(100+i)/100;
int w=canvas.getWidth()*(100+i)/100;
if (h!=0&&w!=0)canvas.setSize(w,h);
}catch(Exception ee){
System.out.println(ee);
}
}
public void showCanvas()
{
bttEnable(true);preBtt.setEnabled(false);
canvas=new printPreviewCanvas(makeBook("Preview"));
js=new JScrollPane(canvas,22,32);
js.setBounds(0,0,1000,720);
JDesktop.add(js);
JDesktop.repaint();
lblPageInfo.setText("1 of "+pageCount);
}
/*--------------------------------------------------*/
public void printLine(int len)
{
objects.addElement(new printLine(len));
}
public void print(String s,Font font)
{
objects.addElement(new printString(s,font));
}
public void println(String s,Font font)
{
print(s,font);
objects.addElement(new newLine());
}
public void println()
{
objects.addElement(new newLine());
}
public void tab(int tabstop)
{
objects.addElement(new printTab(tabFont,tabstop));
}
}
abstract class printerObject
{
abstract void draw(Graphics g,Point p);
}
class newLine extends printerObject
{
public void draw(Graphics g,Point p)
{
p.x=0;
p.y+=g.getFontMetrics(g.getFont()).getHeight();
}
}
class printLine extends printerObject
{
int iLen;
public printLine(int len)
{
iLen=len;
}
public void draw(Graphics g,Point p)
{
Font f=new Font("MonoSpaced",Font.PLAIN,1);
Font oldFont=g.getFont();
g.setFont(f);
g.drawLine(p.x,p.y,p.x+iLen,p.y);
p.x+=p.x+iLen;
g.setFont(oldFont);
}
}
class printString extends printerObject
{
String st;
Font newFont;
public printString (String s,Font font)
{
st=s;
newFont=font;
}
public void draw(Graphics g, Point p)
{
Font oldFont=g.getFont();
g.setFont(newFont);
g.drawString(st,p.x,p.y);
p.x+=g.getFontMetrics(g.getFont()).stringWidth(st);
g.setFont(oldFont);
}
}
class printTab extends printerObject
{
static int tab_width=0;
int tab_dist;
Font tabFnt;
public printTab(Font tbFont,int tabdist)
{
tabFnt=tbFont;
tab_dist=tabdist;
}
public void draw(Graphics g,Point p)
{
if(tab_width==0) tab_width=g.getFontMetrics(tabFnt).stringWidth("W");
if(p.x<(tab_dist*tab_width)) p.x=tab_dist*tab_width;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -