java打印功能实现。Java提供的打印功能一直都比较弱,对于table中的规则记录,可以直接使用table.print()方法进行打印,但是对于不规则的信息打印,就需要用Graphics2D来进行描绘了,通过画矩形、写文本来拼凑,如:
g2.draw(new Rectangle2D.Double(0, 0, 150,20));
g2.drawString(“中国富强”, 1, 15);
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.print.*;
import javax.print.attribute.*;
import javax.swing.*;
public class PrintTestFrame extends javax.swing.JFrame {
private PrintPanel canvas;
private PrintRequestAttributeSet attributes;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 300;
public PrintTestFrame() {
initComponents();
setTitle(“PrintTest”);
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
this.setLayout(new BorderLayout());
canvas = new PrintPanel();
this.getContentPane().add(canvas, BorderLayout.CENTER);
attributes = new HashPrintRequestAttributeSet();
JPanel buttonPanel = new JPanel();
JButton printButton = new JButton(“Print”);
buttonPanel.add(printButton);
printButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
try{
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(canvas);
if (job.printDialog(attributes))
job.print(attributes);
}catch (PrinterException e){
JOptionPane.showMessageDialog(PrintTestFrame.this, e);
}
}
});
JButton pageSetupButton = new JButton(“Page setup”);
buttonPanel.add(pageSetupButton);
pageSetupButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
PrinterJob job = PrinterJob.getPrinterJob();
job.pageDialog(attributes);
}
});
this.getContentPane().add(buttonPanel, BorderLayout.NORTH);
}
class PrintPanel extends JPanel implements Printable{
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
drawPage(g2); //相当于在窗体上预览打印结果
}
public int print(Graphics g, PageFormat pf, int page) throws PrinterException{
if (page >= 1) return Printable.NO_SUCH_PAGE;
Graphics2D g2 = (Graphics2D) g;
g2.translate(pf.getImageableX(), pf.getImageableY());
// g2.draw(new Rectangle2D.Double(0, 0, pf.getImageableWidth(), pf.getImageableHeight())); //整个纸张的外边框
drawPage(g2,pf.getImageableWidth(),pf.getImageableHeight()); //打印
return Printable.PAGE_EXISTS;
}
public void drawPage(Graphics2D g2,double width,double height){
g2.draw(new Rectangle2D.Double(0, 0, width/2,20)); //起点(x,y),宽,高
g2.draw(new Rectangle2D.Double(width/2, 0, width/2,20));
g2.draw(new Rectangle2D.Double(0, 20, width,20));
g2.drawString(“你好,中国!”, 1, 15); //x,y
g2.drawString(“天气很晴朗”, (int)width/2, 15);
}
public void drawPage(Graphics2D g2){
g2.draw(new Rectangle2D.Double(0, 0, 150,20)); //起点(x,y),宽,高
g2.draw(new Rectangle2D.Double(150, 0, 150,20));
g2.draw(new Rectangle2D.Double(0, 20, 300,20));
g2.drawString(“你好,中国!”, 1, 15); //x,y
g2.drawString(“天气很晴朗”, 151, 15);
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new PrintTestFrame().setVisible(true);
}
});
}
}