gpt4 book ai didi

java - 热敏打印机java

转载 作者:行者123 更新时间:2023-11-29 07:12:42 25 4
gpt4 key购买 nike

请帮助尝试使用此代码在热敏打印机中打印,我在系统托盘中得到了打印作业,但我的热敏打印机不打印。PrintReceiptUtil 类:

import java.awt.JobAttributes;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;

import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;

import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;


public static void doPrintReceipt() throws IOException, PrintException{

String defaultPrinter = PrintServiceLookup.lookupDefaultPrintService().getName();
System.out.println("Default printer: " + defaultPrinter);
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
// prints the famous hello world! plus a form feed
InputStream is = new ByteArrayInputStream("hello world!\f".getBytes("UTF8"));

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

pras.add(new Copies(1));

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc doc = new SimpleDoc(is, flavor, null);
DocPrintJob job = service.createPrintJob();

PrintJobWatcher pjw = new PrintJobWatcher(job);
job.print(doc, pras);
pjw.waitForDone();
is.close();
}
}

PrintJobWatcher 类:用于监控打印作业,我到达“打印完成”但我的热敏打印机不打印任何内容

import javax.print.DocPrintJob;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;

public PrintJobWatcher(DocPrintJob 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;
System.out.println("Printing done ...");
PrintJobWatcher.this.notify();
}
}
});
}

public synchronized void waitForDone() {
try {
while (!done) {
wait();
}
} catch (InterruptedException e) {
}
}
}

最佳答案

@bhuvanpavan 的工作版本

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.OrientationRequested;
import javax.swing.JTextArea;

public class NewClass {

public void a() {
PageFormat format = new PageFormat();
Paper paper = new Paper();

double paperWidth = 3;//3.25
double paperHeight = 3.69;//11.69
double leftMargin = 0.12;
double rightMargin = 0.10;
double topMargin = 0;
double bottomMargin = 0.01;

paper.setSize(paperWidth * 200, paperHeight * 200);
paper.setImageableArea(leftMargin * 200, topMargin * 200,
(paperWidth - leftMargin - rightMargin) * 200,
(paperHeight - topMargin - bottomMargin) * 200);

format.setPaper(paper);

PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(OrientationRequested.PORTRAIT);
//testing

PrinterJob printerJob = PrinterJob.getPrinterJob();
Printable printable = new ReceiptPrint();

format = printerJob.validatePage(format);
boolean don = printerJob.printDialog();
printerJob.setPrintable(printable, format);
try {
printerJob.print(aset);
} catch (Exception e) {
e.printStackTrace();
}
}

}

class ReceiptPrint implements Printable {

SimpleDateFormat df = new SimpleDateFormat();
String receiptDetailLine;
public static final String pspace = " ";//15-spaces

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {

df.applyPattern("dd/MM/yyyy HH:mm:ss");
String strText = null;
final String LF = "\n";// text string to output
int lineStart; // start index of line in textarea
int lineEnd; // end index of line in textarea
int lineNumber;
int lineCount;
final String SPACE = " ";//10 spaces
final String SPACES = " ";//9
final String uline = "________________________________________";
final String dline = "----------------------------------------";
String greetings = "THANKS FOR YOUR VISIT";
receiptDetailLine = "asdasdasda";

Graphics2D g2d = (Graphics2D) graphics;
Font font = new Font("MONOSPACED", Font.BOLD, 9);

if (pageIndex < 0 || pageIndex >= 1) {
return Printable.NO_SUCH_PAGE;
}
JTextArea textarea = new JTextArea(10, 40);

//testing
textarea.append(SPACES + "sadasdsad" + "\n");

textarea.append(" " + SPACES + "sadasdsad" + "\n");

textarea.append(SPACES + "sadasdsad" + "\n");

textarea.append("" + SPACES + "sadasdsad" + "\n");

textarea.append(SPACES + "sadasdsad" + "\n");

textarea.append(uline + "\n");
textarea.append("Order Ref:" + " " + receiptDetailLine + "\n");
textarea.append(dline + "\n");
textarea.append(" Qty Description" + SPACES + " Price" + LF);
textarea.append(dline + "\n");

System.out.println(2);

String printedLine = " Service Charge Complimentary";
textarea.append(printedLine + LF);

textarea.append(LF + SPACES + " Your Reciept\n" + SPACE + greetings + LF);
textarea.append(df.format(new Date()) + LF);
textarea.setEditable(false);

g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

g2d.setFont(font);
lineNumber = 0;
lineCount = textarea.getLineCount();
strText = textarea.getText();
/*MediaTracker mt = new MediaTracker(textarea);
URL imageURL = null;
try {

imageURL = new URL(mainDirectory+"quindell.png");
} catch (MalformedURLException me) {
me.printStackTrace();
}

//--- Load the image and wait for it to load
Image image = Toolkit.getDefaultToolkit().getImage(imageURL);
mt.addImage(image, 0);
*/

while (lineCount != 0) {
try {

lineStart = textarea.getLineStartOffset(lineNumber);
lineEnd = textarea.getLineEndOffset(lineNumber);
strText = textarea.getText(lineStart, lineEnd - lineStart);
} catch (Exception exception) {
System.out.println("Printing error:" + exception); // have to catch BadLocationException
}

g2d.drawString(strText, 1, (lineNumber + 1) * 18);
//spacing between lines
lineNumber = lineNumber + 1;
lineCount--;
}
return Printable.PAGE_EXISTS;
}
}

关于java - 热敏打印机java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12336607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com