2016-02-27 37 views
1

我必須使用熱敏打印機Sewoo SLK-TS400打印收據。我正在製作一個字符串,並希望用打印機進行打印。但它正在打印白頁。我已經搜索了很多東西,但沒有任何反應。Java代碼正在打印白頁

爲了使法案

package printprogram; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.swing.table.DefaultTableModel; 

public class MakingBill { 
public static void main(String[] args) 
{ 

    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    DateFormat timeFormat = new SimpleDateFormat("HH:mm"); 
    Date date = new Date(); 
    Date time = new Date(); 
    String Date = dateFormat.format(date); 
    String Time = timeFormat.format(time); 
    String Header = 
     " ****Super Market****  \n" 
     + "Date: "+Date+"  Time: "+Time+"\n" 
     + "---------------------------------\n" 
     + "Name   Qty Rate  Amt\n" 
     + "---------------------------------\n"; 

    String amt =  
     "\n \n \nTotal Amount = " +"\n" 
     + "Tax ="  + "\n" 
     + "*********************************\n" 
     + "Thank you. \n"; 

    String bill = Header; 
    System.out.println(bill); 

    Main mn = new Main(); 
    mn.printCard(bill);  
} 
} 

方法和打印票據

package printprogram; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.print.PageFormat; 
import java.awt.print.Printable; 
import java.awt.print.PrinterException; 
import java.awt.print.PrinterJob; 

public class Main { 

public static void printCard(final String bill) { 
    Printable contentToPrint = new Printable() { 
     @Override 
     public int print(Graphics graphics, PageFormat pageFormat, int page)  throws PrinterException { 
      if (page > 0) { 
       return NO_SUCH_PAGE; 
      } 
      pageFormat.setOrientation(PageFormat.LANDSCAPE); 
      Graphics2D g2d = (Graphics2D) graphics.create(); 

      g2d.setPaint(Color.black); 
      g2d.setFont(new Font("Arial", Font.BOLD, 10)); 
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableX()); 

      g2d.drawString(bill, 0, 0); 

      return PAGE_EXISTS; 
     } 
    }; 

    PrinterJob job = PrinterJob.getPrinterJob(); 
    job.setPrintable(contentToPrint); 
    //You can show a print dialog before printing by job by wrapping the following blocks with a conditional statement if(job.printDialog()){...} 
    try { 
     job.print(); 
    } catch (PrinterException e) { 
     System.err.println(e.getMessage()); 
    } 

    } 
} 

請幫助類。我是新來的Java。

+0

如果我的答案解決了您的問題,我將不勝感激,如果您單擊我的答案旁邊的勾號(左上角)向其他人展示問題已得到充分回答,並讓問題的作者(我)知道他們的答案是正確的。 – Dan

回答

0

首先我想說抱歉,花了這麼長時間纔有人回答你的問題。現在在主題上。

有你的代碼的一些問題,但在Main.java

  1. 如果你的代碼g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableX());你叫getImageableX()兩次,而不是g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());他們纔會發生。

  2. 如果您嘗試繪製字符串bill您似乎並未意識到drawString()無法處理新行\n這一事實。要解決這個問題,你可以使用FontMetrics。例如:

    private void drawString(Graphics g, String text, int x, int y) { 
        for (String line : text.split("\n")) 
         g.drawString(line, x, y += g.getFontMetrics().getHeight()); 
    } 
    

可以肯定的作品下方提供的代碼,我測試了它和它打印正確。


這使你的代碼看起來像這樣

Main.java

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.print.PageFormat; 
import java.awt.print.Printable; 
import java.awt.print.PrinterException; 
import java.awt.HeadlessException; 
import java.awt.print.PrinterJob; 

public class Main { 
    private void drawString(Graphics g, String text, int x, int y) { 
     for (String line : text.split("\n")) 
      g.drawString(line, x, y += g.getFontMetrics().getHeight()); 
    } 

    public Main(String bill) { 
     Printable contentToPrint = new Printable() { 
      @Override 
      public int print(Graphics graphics, PageFormat pageFormat, int page) throws PrinterException { 
       if (page > 0) { 
        return NO_SUCH_PAGE; 
       } 
       pageFormat.setOrientation(PageFormat.LANDSCAPE); 
       Graphics2D g2d = (Graphics2D)graphics; 

       g2d.setPaint(Color.black); 
       g2d.setFont(new Font("Arial", Font.BOLD, 10)); 
       g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 

       drawString(g2d, bill, 0, 0); 

       return PAGE_EXISTS; 
      } 
     }; 

     PrinterJob job = PrinterJob.getPrinterJob(); 
     job.setPrintable(contentToPrint); 
     try { 
      job.printDialog(); 
      job.print(); 
     } catch (PrinterException e) { 
      System.err.println(e.getMessage()); 
     } catch (HeadlessException e) { 
      System.err.println(e.getMessage()); 
     } 
    } 
} 

MakingBill.java

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.swing.table.DefaultTableModel; 

public class MakingBill { 
    public static void main(String[] args) { 
     DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
     DateFormat timeFormat = new SimpleDateFormat("HH:mm"); 
     Date date = new Date(); 
     Date time = new Date(); 
     String Date = dateFormat.format(date); 
     String Time = timeFormat.format(time); 
     String Header = 
      " ****Super Market****  \n" 
      + "Date: "+Date+"  Time: "+Time+"\n" 
      + "---------------------------------\n" 
      + "Name   Qty Rate  Amt\n" 
      + "---------------------------------\n"; 

     String amt =  
      "\n \n \nTotal Amount = " +"\n" 
      + "Tax ="  + "\n" 
      + "*********************************\n" 
      + "Thank you. \n"; 

     String bill = Header; 
     System.out.println(bill); 

     Main mn = new Main(bill); 
    } 
} 

這將產生一個輸出看起來像t他:

Output

使一切排隊,你想要麼增加額外的-或更改字體。