有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java代码正在打印白页

我必须使用热敏打印机Sewoo SLK-TS400打印收据。我正在制作一个字符串,想用打印机打印它。但它正在打印白页。我已经搜索了很多东西,但什么也没发生

制定账单的方法

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新手


共 (1) 个答案

  1. # 1 楼答案

    首先,我想说对不起,有人花了这么长时间才回答你的问题。现在谈正题

    您的代码有一些问题,但它们只发生在Main.java

    1. 其中代码g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableX());调用了getImageableX()两次,而不是g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

    2. 当您尝试绘制字符串bill时,您似乎没有意识到drawString()无法处理新行\n。要解决此问题,可以使用^{}。例如:

      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());
            }
        }
    }
    

    制作比尔。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);
        }
    }
    

    这将生成一个如下所示的输出:

    Output

    要使所有内容按您的意愿排列,请添加额外的-或更改字体