2016-12-14 5 views
0

Мой код термопринтера java не может печатать длинную квитанцию ​​(размер листа A4). Его работа нормально работает, но в случае, когда в корзине слишком много предметов, он генерирует половину печати. Мой код находится под mentioned-Код Java не может печатать длинную квитанцию ​​в термопринтере

public PrintReceipt(Map<String,String> hm){ 

     /* 
      product details code.. 


     */ 


     try{ 


      input = new FileInputStream("C:/printer.properties"); 
      prop.load(input); 
      printerName=prop.getProperty("receiptPrinter"); 
      System.out.println("Printer Name "+printerName); 

       }catch(Exception exception){ 
        System.out.println("Properties file not found"); 
       } 

      PrintService[] pservices = PrintServiceLookup.lookupPrintServices(null,null); 

      for (int i = 0; i < pservices.length; i++) { 
      if (pservices[i].getName().equalsIgnoreCase(printerName)) { 
      job = PrinterJob.getPrinterJob(); 
      PageFormat pf = job.defaultPage(); 

      double margin = 1.0D; 
      Paper paper = new Paper(); 
      paper.setSize(216D, paper.getHeight()); 
      paper.setImageableArea(margin, margin, paper.getWidth() - margin * 1.5D, paper.getHeight() - margin * 1.5D); 
      pf.setPaper(paper);   
      job.setCopies(1); 
      pf.setOrientation(1); 
      job.setPrintable(this, pf); 

      try 
      { 
       job.print(); 
      } 
      catch(PrinterException ex) 
      { 
      System.out.println("Printing failed"); 

     } 
     } 
    } 
} 



public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) 
     throws PrinterException { 
    if(pageIndex > 0) 
     return 1; 


      Graphics2D g2d = (Graphics2D)graphics; 


      double width = pageFormat.getImageableWidth(); 
      double height = pageFormat.getImageableHeight();  
      g2d.translate((int) pageFormat.getImageableX(),(int) pageFormat.getImageableY()); 
      Font font = new Font("Monospaced",Font.BOLD,8);  
      g2d.setFont(font); 

      try { 
       /* 
         * Draw Image* 


         */ 
            int x=50 ;          
            int y=10;          
            int imagewidth=100; 
            int imageheight=50; 
          BufferedImage read = ImageIO.read(new File("C:/hotel.png")); 
          g2d.drawImage(read,x,y,imagewidth,imageheight,null);   //draw image 
          g2d.drawString("-- * Resturant * --", 20,y+60); 
          g2d.drawLine(10, y+70, 180, y+70);       //draw line 
           } catch (IOException e) { 
         e.printStackTrace(); 
        } 
      try{ 

       /*Draw Header*/ 


     /* 
      product details code.. 


     */ 


      /*Footer*/ 


      //end of the receipt 



      } 
      catch(Exception r){ 
       r.printStackTrace(); 
      } 


    return 0; 
} 

Пожалуйста, дайте мне знать, как я могу генерировать длинные квитанции печать, корректируя мой код, или если у вас есть какие-либо лучшее решение, чтобы сделать это.

+0

ли 'Paper' класс часть API или Осуществляли ли вы его? – CraigR8806

+0

Его часть API java.awt.print.Paper – 007

ответ

0

Прямо здесь:

Paper paper = new Paper(); 
paper.setSize(216D, paper.getHeight()); 

Вы создаете новый объект Paper и не устанавливая его высоту.

В документации этого класса link.

При создании объекта бумаги, он несет ответственность приложения, чтобы убедиться, что размер бумаги и область изображения совместимы

Вы должны установить высоту бумаги, вызвав paper.setSize(width, height) или это будет используйте свой размер по умолчанию.

Размеры указаны в 1/72nds дюйма.

Так как ширина и высота должны быть представлены в этом формате, как double s

+0

Если это решение сработало для вас, выберите его в качестве ответа. – CraigR8806

+0

Я знаю о методе класса бумаги, и я уже пробовал его, указав пользовательскую высоту и ширину. Но это не работает для меня. – 007

 Смежные вопросы

  • Нет связанных вопросов^_^