日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

java實(shí)現(xiàn)打印

 hncdman 2023-02-14 發(fā)布于湖南



我這里有以前收藏的代碼,兩個(gè)類(lèi)實(shí)現(xiàn)了簡(jiǎn)易的文本打印機(jī)的功能,包括預(yù)覽。簡(jiǎn)單跟你說(shuō)一下。

1、PrinterDemo.java主體類(lèi),也是入口類(lèi),里面有main方法可以直接在Eclipse中調(diào)試運(yùn)行,他實(shí)現(xiàn)了從本地磁盤(pán)讀取文本類(lèi)文件打印以及打印預(yù)覽的功能,其中File動(dòng)作按鈕中的PrintPreviw就是打印預(yù)覽功能,你可以運(yùn)行看看。

2、PrintPreview.java打印預(yù)覽類(lèi),這是專門(mén)為預(yù)覽打印設(shè)計(jì)的類(lèi),通過(guò)他的構(gòu)造方法可以構(gòu)造出一個(gè)預(yù)覽類(lèi),PrinterDemo中的預(yù)覽功能就是調(diào)用了這個(gè)類(lèi)。

兩個(gè)類(lèi)的源碼:

【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 < lineVector.size(); i++)

                {

                    String line = (String) lineVector.elementAt(i);

                    page.addElement(line);

                    y += fontSize;

                    if (y + fontSize * 2 > 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 < page.size(); i++){

                    String line = (String) page.elementAt(i);

                    if (line.length() > 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 < pageVector.size() - 1)

                    currentPageIndex++;

                repaint();

            }

            public void previousPage(){

                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 (!(comps[k] instanceof PagePreview))

                        continue;

                    PagePreview pp = (PagePreview) comps[k];

                    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(g, pageFormat, pageIndex) != Printable.PAGE_EXISTS)

                    break;

                PagePreview pp = new PagePreview(w, h, img);

                m_preview.add(pp);

                pageIndex++;

            }

        } catch (PrinterException e)

        {

            e.printStackTrace();

            System.err.println("Printing   error:   " + e.toString());

        }

        JScrollPane ps = new JScrollPane(m_preview);

        getContentPane().add(ps, BorderLayout.CENTER);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        setVisible(true);

    }

    class PreviewContainer extends JPanel

    {

        private static final long serialVersionUID = 1L;

        protected int H_GAP = 16;

        protected int V_GAP = 10;

        public Dimension getPreferredSize()

        {

            int n = getComponentCount();

            if (n == 0)

                return new Dimension(H_GAP, V_GAP);

            Component comp = getComponent(0);

            Dimension dc = comp.getPreferredSize();

            int w = dc.width;

            int h = dc.height;

            Dimension dp = getParent().getSize();

            int nCol = Math.max((dp.width - H_GAP) / (w + H_GAP), 1);

            int nRow = n / nCol;

            if (nRow * nCol < n)

                nRow++;

            int ww = nCol * (w + H_GAP) + H_GAP;

            int hh = nRow * (h + V_GAP) + V_GAP;

            Insets ins = getInsets();

            return new Dimension(ww + ins.left + ins.right, hh + ins.top + ins.bottom);

        }

        public Dimension getMaximumSize()

        {

            return getPreferredSize();

        }

        public Dimension getMinimumSize()

        {

            return getPreferredSize();

        }

        public void doLayout()

        {

            Insets ins = getInsets();

            int x = ins.left + H_GAP;

            int y = ins.top + V_GAP;

            int n = getComponentCount();

            if (n == 0)

                return;

            Component comp = getComponent(0);

            Dimension dc = comp.getPreferredSize();

            int w = dc.width;

            int h = dc.height;

            Dimension dp = getParent().getSize();

            int nCol = Math.max((dp.width - H_GAP) / (w + H_GAP), 1);

            int nRow = n / nCol;

            if (nRow * nCol < n)

                nRow++;

            int index = 0;

            for (int k = 0; k < nRow; k++)

            {

                for (int m = 0; m < nCol; m++)

                {

                    if (index >= n)

                        return;

                    comp = getComponent(index++);

                    comp.setBounds(x, y, w, h);

                    x += w + H_GAP;

                }

                y += h + V_GAP;

                x = ins.left + H_GAP;

            }

        }

    }

    class PagePreview extends JPanel

    {

        private static final long serialVersionUID = 1L;

        protected int   m_w;

        protected int   m_h;

        protected Image m_source;

        protected Image m_img;

        public PagePreview(int w, int h, Image source)

        {

            m_w = w;

            m_h = h;

            m_source = source;

            m_img = m_source.getScaledInstance(m_w, m_h, Image.SCALE_SMOOTH);

            m_img.flush();

            setBackground(Color.white);

            setBorder(new MatteBorder(1, 1, 2, 2, Color.black));

        }

        public void setScaledSize(int w, int h)

        {

            m_w = w;

            m_h = h;

            m_img = m_source.getScaledInstance(m_w, m_h, Image.SCALE_SMOOTH);

            repaint();

        }

        public Dimension getPreferredSize()

        {

            Insets ins = getInsets();

            return new Dimension(m_w + ins.left + ins.right, m_h + ins.top + ins.bottom);

        }

        public Dimension getMaximumSize()

        {

            return getPreferredSize();

        }

        public Dimension getMinimumSize()

        {

            return getPreferredSize();

        }

        public void paint(Graphics g)

        {

            g.setColor(getBackground());

            g.fillRect(0, 0, getWidth(), getHeight());

            g.drawImage(m_img, 0, 0, this);

            paintBorder(g);

        }

    }
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多