import java.io.*;public class SimplePrinting
{
public static void main(String args[])
{
try{
FileWriter out = new FileWriter("lpt1");
out.write("Hello world!");
out.write(0x0c);//CR
out.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    不解,可以解释一下吗?
    在FileWriter("lpt1")是调用端口号吗?
      

  2.   

    import java.awt.*;
    import java.awt.event.*;
    public class print
    {public static void main(String args[])
     { MyFrame f=new MyFrame();
       f.setBounds(70,70,70,89);
       f.setVisible(true);f.pack();
     }
    }
    class MyFrame extends Frame implements ActionListener
    { PrintJob p=null; //声明一个PrintJob对象。
      Graphics g=null;
      TextArea text=new TextArea(10,10);
      Button 打印文本框=new Button("打印文本框"),
             打印窗口=new Button("打印窗口"),
             打印按扭=new Button("打印按扭");
      MyFrame()
      { super("在应用程序中打印");
        打印文本框.addActionListener(this);
        打印窗口.addActionListener(this);
        打印按扭.addActionListener(this);
        add(text,"Center");
        Panel panel=new Panel();
        panel.add(打印文本框); panel.add(打印窗口); panel.add(打印按扭);
        add(panel,"South");
        addWindowListener(new WindowAdapter()
         {public void windowClosing(WindowEvent e)
         {System.exit(0); }
         });
      }
     public void actionPerformed(ActionEvent e)
       { if(e.getSource()==打印文本框)
        { p=getToolkit().getPrintJob(this,"ok",null);
    //创建一个PrintJob对象p 。
          g=p.getGraphics();    //p获取一个用于打印的 Graphics对象。
          g.translate(120,200);
          text.printAll(g);
          g.dispose();          //释放对象 g。
          p.end();
        }
       else if(e.getSource()==打印窗口)
        { p=getToolkit().getPrintJob(this,"ok",null);
          g=p.getGraphics();    //p获取一个用于打印的 Graphics对象。
          g.translate(120,200);
          this.printAll(g);      //打印当前窗口及其子组件。
          g.dispose();          //释放对象 g。
          p.end();
        }
       else if(e.getSource()==打印按扭)
        { p=getToolkit().getPrintJob(this,"ok",null);
          g=p.getGraphics();
          g.translate(120,200); //在打印页的坐标(120,200)处打印第一个"按扭"。
          打印文本框.printAll(g);
          g.translate(78,0);   //在打印页的坐标(198,200)处打印第二个"按扭"。
          打印窗口.printAll(g);
          g.translate(66,0);   //在打印页的坐标(264,200)处打印第三个"按扭"。
          打印按扭.printAll(g);
          g.dispose();
          p.end();
        }
      }
    }
      

  3.   

    我这里也有一个打印程序,可以看看!不过我要的是如何调用本地的打印功能!
    打印预览:
    package com.szallcom.tools;import java.awt.event.*;
    import java.awt.*;
    import java.awt.print.*;
    import javax.swing.*;
    import wf.common.SystemProperties;
    import java.awt.geom.*;public class PrintPreviewDialog extends JDialog
    implements ActionListener
    {
        private JButton nextButton = new JButton("Next");
        private JButton previousButton = new JButton("Previous");
        private JButton closeButton = new JButton("Close");
        private JPanel buttonPanel = new JPanel();
        private PreviewCanvas canvas;    public PrintPreviewDialog(Frame parent, String title, boolean modal, PrintTest pt, String str)
        {
            super(parent, title, modal);
            canvas = new PreviewCanvas(pt, str);
            setLayout();
        }    private void setLayout()
        {
            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add(canvas, BorderLayout.CENTER);        nextButton.setMnemonic('N');
            nextButton.addActionListener(this);
            buttonPanel.add(nextButton);
            previousButton.setMnemonic('N');
            previousButton.addActionListener(this);
            buttonPanel.add(previousButton);
            closeButton.setMnemonic('N');
            closeButton.addActionListener(this);
            buttonPanel.add(closeButton);
            this.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
            this.setBounds((int)((SystemProperties.SCREEN_WIDTH - 400) / 2), (int)((SystemProperties.SCREEN_HEIGHT - 400) / 2), 400, 400);
        }    public void actionPerformed(ActionEvent evt)
        {
            Object src = evt.getSource();
            if (src == nextButton)
                nextAction();
            else if (src == previousButton)
                previousAction();
            else if (src == closeButton)
                closeAction();
        }    private void closeAction()
        {
            this.setVisible(false);
            this.dispose();
        }    private void nextAction()
        {
            canvas.viewPage(1);
        }    private void previousAction()
        {
            canvas.viewPage(-1);
        }    class PreviewCanvas extends JPanel
        {
            private String printStr;
            private int currentPage = 0;
            private PrintTest preview;        public PreviewCanvas(PrintTest pt, String str)
            {
                printStr = str;
                preview = pt;
            }        public void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                Graphics2D g2 = (Graphics2D)g;
                PageFormat pf = PrinterJob.getPrinterJob().defaultPage();            double xoff;
                double yoff;
                double scale;
                double px = pf.getWidth();
                double py = pf.getHeight();
                double sx = getWidth() - 1;
                double sy = getHeight() - 1;
                if (px / py < sx / sy)
                {
                    scale = sy / py;
                    xoff = 0.5 * (sx - scale * px);
                    yoff = 0;
                }
                else
                {
                    scale = sx / px;
                    xoff = 0;
                    yoff = 0.5 * (sy - scale * py);
                }
                g2.translate((float)xoff, (float)yoff);
                g2.scale((float)scale, (float)scale);            Rectangle2D page = new Rectangle2D.Double(0, 0, px, py);
                g2.setPaint(Color.white);
                g2.fill(page);
                g2.setPaint(Color.black);
                g2.draw(page);            try
                {
                    preview.print(g2, pf, currentPage);
                }
                catch(PrinterException pe)
                {
                    g2.draw(new Line2D.Double(0, 0, px, py));
                    g2.draw(new Line2D.Double(0, px, 0, py));
                }
            }        public void viewPage(int pos)
            {
                int newPage = currentPage + pos;
                if (0 <= newPage && newPage < preview.getPagesCount(printStr))
                {
                    currentPage = newPage;
                    repaint();
                }
            }
        }
    }
      

  4.   

    import java.awt.print.*;
    import wf.common.SystemProperties;
    import javax.print.*;
    import javax.print.attribute.*;
    import java.io.*;public class PrintTest extends JFrame
    implements ActionListener, Printable
    {
    private JButton printTextButton = new JButton("Print Text");
        private JButton previewButton = new JButton("Print Preview");
    private JButton printText2Button = new JButton("Print Text2");
    private JButton printFileButton = new JButton("Print File");
        private JButton printFrameButton = new JButton("Print Frame");
        private JButton exitButton = new JButton("Exit");
        private JLabel tipLabel = new JLabel("");
        private JTextArea area = new JTextArea();
        private JScrollPane scroll = new JScrollPane(area);
        private JPanel buttonPanel = new JPanel();    private int PAGES = 0;
        private String printStr;    public PrintTest()
        {
            this.setTitle("Print Test");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setBounds((int)((SystemProperties.SCREEN_WIDTH - 800) / 2), (int)((SystemProperties.SCREEN_HEIGHT - 600) / 2), 800, 600);
            initLayout();
        }    private void initLayout()
        {
            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add(scroll, BorderLayout.CENTER);
            printTextButton.setMnemonic('P');
            printTextButton.addActionListener(this);
            buttonPanel.add(printTextButton);
            previewButton.setMnemonic('v');
            previewButton.addActionListener(this);
            buttonPanel.add(previewButton);
            printText2Button.setMnemonic('e');
            printText2Button.addActionListener(this);
            buttonPanel.add(printText2Button);
            printFileButton.setMnemonic('i');
            printFileButton.addActionListener(this);
            buttonPanel.add(printFileButton);
            printFrameButton.setMnemonic('F');
            printFrameButton.addActionListener(this);
            buttonPanel.add(printFrameButton);
            exitButton.setMnemonic('x');
            exitButton.addActionListener(this);
            buttonPanel.add(exitButton);
            this.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
        }    public void actionPerformed(ActionEvent evt)
        {
            Object src = evt.getSource();
            if (src == printTextButton)
                printTextAction();
            else if (src == previewButton)
                previewAction();
            else if (src == printText2Button)
                printText2Action();
            else if (src == printFileButton)
                printFileAction();
            else if (src == printFrameButton)
                printFrameAction();
            else if (src == exitButton)
                exitApp();
        }    public int print(Graphics g, PageFormat pf, int page) throws PrinterException
    {
            Graphics2D g2 = (Graphics2D)g;
            g2.setPaint(Color.black);
        if (page >= PAGES)
            return Printable.NO_SUCH_PAGE;
            g2.translate(pf.getImageableX(), pf.getImageableY());
            drawCurrentPageText(g2, pf, page);
            return Printable.PAGE_EXISTS;
    }    private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page)
    {
            Font f = area.getFont();
            String s = getDrawText(printStr)[page];
            String drawText;
            float ascent = 16;
            int k, i = f.getSize(), lines = 0;
            while(s.length() > 0 && lines < 54)
            {
                k = s.indexOf('\n');
                if (k != -1)
                {
                    lines += 1;
                    drawText = s.substring(0, k);
                    g2.drawString(drawText, 0, ascent);
                    if (s.substring(k + 1).length() > 0)
                    {
                        s = s.substring(k + 1);
                        ascent += i;
                    }
                }
                else
                {
                    lines += 1;
                    drawText = s;
                    g2.drawString(drawText, 0, ascent);
                    s = "";
                }
            }
    }
      

  5.   

    public String[] getDrawText(String s)
        {
            String[] drawText = new String[PAGES];
            for (int i = 0; i < PAGES; i++)
                drawText[i] = "";        int k, suffix = 0, lines = 0;
            while(s.length() > 0)
            {
                if(lines < 54)
                {
                    k = s.indexOf('\n');
                    if (k != -1)
                    {
                        lines += 1;
                        drawText[suffix] = drawText[suffix] + s.substring(0, k + 1);
                        if (s.substring(k + 1).length() > 0)
                            s = s.substring(k + 1);
                    }
                    else
                    {
                        lines += 1;
                        drawText[suffix] = drawText[suffix] + s;
                        s = "";
                    }
                }
                else
                {
                    lines = 0;
                    suffix++;
                }
            }
            return drawText;
        }    public int getPagesCount(String curStr)
    {
            int page = 0;
            int position, count = 0;
            String str = curStr;
        while(str.length() > 0)
        {
            position = str.indexOf('\n');
                count += 1;
            if (position != -1)
                    str = str.substring(position + 1);
            else
                str = "";
        }     if (count > 0)
            page = count / 54 + 1;        return page;
    }    private void printTextAction()
        {
            printStr = area.getText().trim();
            if (printStr != null && printStr.length() > 0)
            {
                PAGES = getPagesCount(printStr);
                PrinterJob myPrtJob = PrinterJob.getPrinterJob();
                PageFormat pageFormat = myPrtJob.defaultPage();
                myPrtJob.setPrintable(this, pageFormat);
                if (myPrtJob.printDialog())
                {
                    try
                    {
                        myPrtJob.print();
                    }
                    catch(PrinterException pe)
                    {
                        pe.printStackTrace();
                    }
                }
            }
            else
            {
                JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty"
                                            , JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);
            }
        }    private void previewAction()
        {
            printStr = area.getText().trim();
            PAGES = getPagesCount(printStr);
            (new PrintPreviewDialog(this, "Print Preview", true, this, printStr)).setVisible(true);
        }    private void printText2Action()
        {
            printStr = area.getText().trim();
            if (printStr != null && printStr.length() > 0)
            {
                PAGES = getPagesCount(printStr);
                DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
                PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
                DocPrintJob job = printService.createPrintJob();
                PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
                DocAttributeSet das = new HashDocAttributeSet();
                Doc doc = new SimpleDoc(this, flavor, das);            try
                {
                    job.print(doc, pras);
                }
                catch(PrintException pe)
                {
                    pe.printStackTrace();
                }
            }
            else
            {
                JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty"
                                            , JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);
            }
        }    private void printFileAction()
        {
            JFileChooser fileChooser = new JFileChooser(SystemProperties.USER_DIR);
            fileChooser.setFileFilter(new com.szallcom.file.JavaFilter());
            int state = fileChooser.showOpenDialog(this);
            if (state == fileChooser.APPROVE_OPTION)
            {
                File file = fileChooser.getSelectedFile();
                PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
                DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
                PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
                PrintService service = ServiceUI.printDialog(null, 200, 200, printService
                                                            , defaultService, flavor, pras);
                if (service != null)
                {
                    try
                    {
                        DocPrintJob job = service.createPrintJob();
                        FileInputStream fis = new FileInputStream(file);
                        DocAttributeSet das = new HashDocAttributeSet();
                        Doc doc = new SimpleDoc(fis, flavor, das);
                        job.print(doc, pras);
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }    private void printFrameAction()
        {
            Toolkit kit = Toolkit.getDefaultToolkit();
            Properties props = new Properties();
            props.put("awt.print.printer", "durango");
            props.put("awt.print.numCopies", "2");
            if(kit != null)
            {
                PrintJob printJob = kit.getPrintJob(this, "Print Frame", props);
                if(printJob != null)
                {
                    Graphics pg = printJob.getGraphics();
                    if(pg != null)
                    {
    try
    {
                            this.printAll(pg);
                        }
                        finally
                        {
                            pg.dispose();
                        }
                    }
                    printJob.end();
                }
            }
        }    private void exitApp()
        {
            this.setVisible(false);
            this.dispose();
            System.exit(0);
        }    public static void main(String[] args)
        {
            (new PrintTest()).setVisible(true);
        }
    }
      

  6.   

    用JNI本地方法调用,调用C或者C++写的打印代码。
    public class Test{
      //本地打印方法,在外部实现
      public native void testprint();  static{
        System.loadLibrary("本地资源");
      }
      public static void main(String[] args){
        new Test().testprint();
      }
    }
      

  7.   

    使用JNI调用本地方法,这个我也知道,可是我不知道如何用C或者C++去调用!请问有哪位高手调用过的!