java打印功能实现



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);

            }

        });

    }

}