2012-08-16 42 views
6

我试图发送一个简单的字符串(“世界,你好”)连接到打印机,但由于某些原因,只打印第一个字符(“H”)发送纯文本为默认打印机

这里的代码

public class CardPrinter { 
    public static void main(String[] args) { 
     try { 
      PrintService mPrinter = null; 
      Boolean bFoundPrinter = false; 

      PrintService[] printServices = PrinterJob.lookupPrintServices(); 

      // 
      // Iterates the print services and print out its name. 
      // 
      for (PrintService printService : printServices) { 
       String sPrinterName = printService.getName(); 
       if (sPrinterName.equals("DTC4000 Card Printer")) { 
        mPrinter = printService; 
        bFoundPrinter = true; 
       } 
      } 

      // Open the image file 
      String testData = "Hello World !"; 
      InputStream is = new ByteArrayInputStream(testData.getBytes()); 
      DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE ; 

      // Find the default service 
      PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 
      System.out.println(service); 

      // Create the print job 
      DocPrintJob job = service.createPrintJob(); 
      Doc doc= new SimpleDoc(is, flavor, null); 

      // Monitor print job events; for the implementation of PrintJobWatcher, 
      PrintJobWatcher pjDone = new PrintJobWatcher(job); 

      // Print it 
      job.print(doc, null); 

      // Wait for the print job to be done 
      pjDone.waitForDone(); 

      // It is now safe to close the input stream 
      is.close(); 
     } catch (PrintException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    static class PrintJobWatcher { 
     // true iff it is safe to close the print job's input stream 
     boolean done = false; 

     PrintJobWatcher(DocPrintJob job) { 
      // Add a listener to the print job 
      job.addPrintJobListener(new PrintJobAdapter() { 
       public void printJobCanceled(PrintJobEvent pje) { 
        allDone(); 
       } 
       public void printJobCompleted(PrintJobEvent pje) { 
        allDone(); 
       } 
       public void printJobFailed(PrintJobEvent pje) { 
        allDone(); 
       } 
       public void printJobNoMoreEvents(PrintJobEvent pje) { 
        allDone(); 
       } 
       void allDone() { 
        synchronized (PrintJobWatcher.this) { 
         done = true; 
         PrintJobWatcher.this.notify(); 
        } 
       } 
      }); 
     } 
     public synchronized void waitForDone() { 
      try { 
       while (!done) { 
        wait(); 
       } 
      } catch (InterruptedException e) { 
      } 
     } 
    } 
} 

任何想法?

回答

5

添加进纸,

String testData = "Hello World !\f"; 

问题解决了

+0

能否请您检查为什么它不打印任何东西到我的打印机? – YumYumYum 2016-07-04 09:47:26

+1

确切地说,我可以检查您的打印机吗? :-) – Shai 2016-07-04 10:28:15

+0

我可以给你teamviewer吗?与摄像头?因为代码不工作先生。 – YumYumYum 2016-07-04 10:45:17