java打印机.doc_第1页
java打印机.doc_第2页
java打印机.doc_第3页
java打印机.doc_第4页
java打印机.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

猪哥解答:我这里有以前收藏的代码,两个类实现了简易的文本打印机的功能,包括预览。简单跟你说一下。1、PrinterDemo.java主体类,也是入口类,里面有main方法可以直接在Eclipse中调试运行,他实现了从本地磁盘读取文本类文件打印以及打印预览的功能,其中File动作按钮中的PrintPreviw就是打印预览功能,你可以运行看看。2、PrintPreview.java打印预览类,这是专门为预览打印设计的类,通过他的构造方法可以构造出一个预览类,PrinterDemo中的预览功能就是调用了这个类。两个类的源码:【PrinterDemo.java】的源码:import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.Event;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.print.PageFormat;import java.awt.print.Printable;import java.awt.print.PrinterException;import java.awt.print.PrinterJob;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.util.Vector;import javax.swing.AbstractAction;import javax.swing.JComponent;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JScrollPane;import javax.swing.KeyStroke;public class PrinterDemo extends JFrame private static final long serialVersionUID = 1L; private PageFormat pageFormat; private FilePageRenderer pageRenderer; private String title; public PrinterDemo() super(); init(); PrinterJob pj = PrinterJob.getPrinterJob(); pageFormat = pj.defaultPage(); setVisible(true); protected void init() setSize(350, 300); center(); Container content = getContentPane(); content.setLayout(new BorderLayout(); JMenuBar mb = new JMenuBar(); JMenu file = new JMenu(File, true); file.add(new FileOpenAction().setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,Event.CTRL_MASK); file.add(new FilePrintPreviwAction().setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.ALT_MASK); file.add(new FilePrintAction().setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,Event.CTRL_MASK); file.add(new FilePageSetupAction().setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK| Event.SHIFT_MASK); file.addSeparator(); file.add(new FileQuitAction().setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, Event.CTRL_MASK); mb.add(file); JMenu page = new JMenu(Page, true); page.add(new PageNextPageAction() .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, 0); page.add(new PagePreviousPageAction() .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, 0); mb.add(page); setJMenuBar(mb); getContentPane().setLayout(new BorderLayout(); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); protected void center() Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = getSize(); int x = (screenSize.width - frameSize.width) / 2; int y = (screenSize.height - frameSize.height) / 2; setLocation(x, y); public void showTitle() int currentPage = pageRenderer.getCurrentPage() + 1; int numPages = pageRenderer.getNumPages(); setTitle(title + - page + currentPage + of + numPages); public class FileOpenAction extends AbstractAction private static final long serialVersionUID = 1L; public FileOpenAction() super(Open.); public void actionPerformed(ActionEvent ae) / Pop up a file dialog. JFileChooser fc = new JFileChooser(.); int result = fc.showOpenDialog(PrinterDemo.this); if (result != 0) return; java.io.File f = fc.getSelectedFile(); if (f = null) return; / Load the specified file. try pageRenderer = new FilePageRenderer(f, pageFormat); title = + f.getName() + ; showTitle(); JScrollPane jsp = new JScrollPane(pageRenderer); getContentPane().removeAll(); getContentPane().add(jsp, BorderLayout.CENTER); validate(); catch (java.io.IOException ioe) System.out.println(ioe); public static void main(String args) new PrinterDemo(); public class FilePrintPreviwAction extends AbstractAction private static final long serialVersionUID = 1L; public FilePrintPreviwAction() super(PrintPreviw); public void actionPerformed(ActionEvent ae) new PrintPreview(pageRenderer,PrintPreviw,pageFormat.getOrientation(); public class FilePrintAction extends AbstractAction private static final long serialVersionUID = 1L; public FilePrintAction() super(Print); public void actionPerformed(ActionEvent ae) PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(pageRenderer, pageFormat); if (pj.printDialog() try pj.print(); catch (PrinterException e) System.out.println(e); public class FilePageSetupAction extends AbstractAction private static final long serialVersionUID = 1L; public FilePageSetupAction() super(Page setup.); public void actionPerformed(ActionEvent ae) PrinterJob pj = PrinterJob.getPrinterJob(); pageFormat = pj.pageDialog(pageFormat); if (pageRenderer != null) pageRenderer.pageInit(pageFormat); showTitle(); public class FileQuitAction extends AbstractAction private static final long serialVersionUID = 1L; public FileQuitAction() super(Quit); public void actionPerformed(ActionEvent ae) System.exit(0); public class PageNextPageAction extends AbstractAction private static final long serialVersionUID = 1L; public PageNextPageAction() super(Next page); public void actionPerformed(ActionEvent ae) if (pageRenderer != null) pageRenderer.nextPage(); showTitle(); public class PagePreviousPageAction extends AbstractAction private static final long serialVersionUID = 1L; public PagePreviousPageAction() super(Previous page); public void actionPerformed(ActionEvent ae) if (pageRenderer != null) pageRenderer.previousPage(); showTitle(); class FilePageRenderer extends JComponent implements Printable private static final long serialVersionUID = 1L; private int currentPageIndex; private Vector lineVector; private Vector pageVector; private Font font; private int fontSize; private Dimension preferredSize; public FilePageRenderer(File file, PageFormat pageFormat) throws IOException fontSize = 12; font = new Font(Serif, Font.PLAIN, fontSize); BufferedReader in = new BufferedReader(new FileReader(file); String line; lineVector = new Vector(); while (line = in.readLine() != null) lineVector.addElement(line); in.close(); pageInit(pageFormat); public void pageInit(PageFormat pageFormat) currentPageIndex = 0; pageVector = new Vector(); float y = fontSize; Vector page = new Vector(); for (int i = 0; i pageFormat.getImageableHeight() y = 0; pageVector.addElement(page); page = new Vector(); if (page.size() 0) pageVector.addElement(page); preferredSize = new Dimension(int) pageFormat.getImageableWidth(), (int) pageFormat.getImageableHeight(); repaint(); public void paintComponent(Graphics g) Graphics2D g2 = (Graphics2D) g; java.awt.geom.Rectangle2D r = new java.awt.geom.Rectangle2D.Float(0, 0, preferredSize.width, preferredSize.height); g2.setPaint(Color.white); g2.fill(r); Vector page = (Vector) pageVector.elementAt(currentPageIndex); g2.setFont(font); g2.setPaint(Color.black); float x = 0; float y = fontSize; for (int i = 0; i 0) g2.drawString(line, (int) x, (int) y); y += fontSize; public int print(Graphics g, PageFormat pageFormat, int pageIndex) if (pageIndex = pageVector.size() return NO_SUCH_PAGE; int savedPage = currentPageIndex; currentPageIndex = pageIndex; Graphics2D g2 = (Graphics2D) g; g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY(); paint(g2); currentPageIndex = savedPage; return PAGE_EXISTS; public Dimension getPreferredSize() return preferredSize; public int getCurrentPage() return currentPageIndex; public int getNumPages() return pageVector.size(); public void nextPage() if (currentPageIndex 0) currentPageIndex-; repaint(); 【PrintPreview.java】的源码:import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Image;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedImage;import java.awt.print.PageFormat;import java.awt.print.Printable;import java.awt.print.PrinterException;import java.awt.print.PrinterJob;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JToolBar;import javax.swing.border.MatteBorder;public class PrintPreview extends JFrame private static final long serialVersionUID = 1L; protected int m_wPage; protected int m_hPage; protected int m_orientation; protected Printable m_target; protected JComboBox m_cbScale; protected PreviewContainer m_preview; public PrintPreview(Printable target) this(target, Print Preview , PageFormat.PORTRAIT); public PrintPreview(Printable target, String title, int orientation) super(title); setSize(600, 400); getContentPane().setLayout(new BorderLayout(); m_target = target; m_orientation = orientation; JToolBar tb = new JToolBar(); JButton bt = new JButton(Print , new ImageIcon(print.gif ); ActionListener lst = new ActionListener() public void actionPerformed(ActionEvent e) try PrinterJob prnJob = PrinterJob.getPrinterJob(); PageFormat pageFormat = prnJob.defaultPage(); pageFormat.setOrientation(m_orientation); prnJob.setPrintable(m_target, pageFormat); if (!prnJob.printDialog() return; setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR); prnJob.print(); setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR); dispose(); catch (PrinterException ex) ex.printStackTrace(); System.err.println(Printing error: + ex.toString(); ; bt.addActionListener(lst); bt.setAlignmentY(0.5f); bt.setMargin(new Insets(4, 6, 4, 6); tb.add(bt); bt = new JButton(Close ); lst = new ActionListener() public void actionPerformed(ActionEvent e) dispose(); ; bt.addActionListener(lst); bt.setAlignmentY(0.5f); bt.setMargin(new Insets(2, 6, 2, 6); tb.add(bt); String scales = 10%, 25%, 50%, 100% ; m_cbScale = new JComboBox(scales); lst = new ActionListener() public void actionPerformed(ActionEvent e) String str = m_cbScale.getSelectedItem().toString(); if (str.endsWith(%) str = str.substring(0, str.length() - 1); str = str.trim(); int scale = 0; try scale = Integer.parseInt(str); catch (NumberFormatException ex) return; int w = (int) (m_wPage * scale / 100); int h = (int) (m_hPage * scale / 100); Component comps = m_preview.getComponents(); for (int k = 0; k comps.length; k+) if (!(compsk instanceof PagePreview) continue; PagePreview pp = (PagePreview) compsk; pp.setScaledSize(w, h); m_preview.doLayout(); m_preview.getParent().getParent().validate(); ; m_cbScale.addActionListener(lst); m_cbScale.setMaximumSize(m_cbScale.getPreferredSize(); m_cbScale.setEditable(true); tb.addSeparator(); tb.add(m_cbScale); getContentPane().add(tb, BorderLayout.NORTH); m_preview = new PreviewContainer(); PrinterJob prnJob = PrinterJob.getPrinterJob(); PageFormat pageFormat = prnJob.defaultPage(); pageFormat.setOrientation(m_orientation); if (pageFormat.getHeight() = 0 | pageFormat.getWidth() = 0) System.err.println(Unable to determine default page size ); return; m_wPage = (int) (pageFormat.getWidth(); m_hPage = (int) (pageFormat.getHeight(); int scale = 10; int w = (int) (m_wPage * scale / 100); int h = (int) (m_hPage * scale / 100); int pageIndex = 0; try while (true) BufferedImage img = new BufferedImage(m_wPage, m_hPage, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); g.setColor(Color.white); g.fillRect(0, 0, m_wPage, m_hPage); if (target.print(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论