Java中的热打印“;“打印机不接受作业”;
我用java编写热打印的java代码,我只使用microsoft xps document writer在本地机器上测试了它,效果很好,但当我使用Xprinter XP-F900打印机时,我遇到了下一个错误 打印机不接受上的作业 完整代码:Java中的热打印“;“打印机不接受作业”;,java,printing,jobs,Java,Printing,Jobs,我用java编写热打印的java代码,我只使用microsoft xps document writer在本地机器上测试了它,效果很好,但当我使用Xprinter XP-F900打印机时,我遇到了下一个错误 打印机不接受上的作业 完整代码: public class printThisBill { public static void printCard(final String bill) { Printable contentToPrint = new Prin
public class printThisBill {
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;
g2d.translate(pageFormat.getImageableX(),
pageFormat.getImageableY());
g2d.setPaint(Color.black);
g2d.setFont(new Font("Arial", Font.BOLD, 10));
int y = 15;
Font f = new Font(Font.SANS_SERIF, Font.PLAIN, 8);
graphics.setFont(f);
for (int i = 0; i < Tbill.length; i++) {
graphics.drawString(Tbill[i], 5, y);
y = y + 15;
}
return PAGE_EXISTS;
}
};
PrinterService ps = new PrinterService();
PrintService pss = null;
PrinterJob job = null;
// get the printer service by printer name
// first test if printer defind by the use search on db
String query = "SELECT * FROM printer WHERE id_printer=1";
conn = DBconnect.connectDB();
if (db.TestIFex(query, conn)) {
Statement sqlState = null;
ResultSet rows = null;
try {
sqlState = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
rows = sqlState.executeQuery(query);
String printer_name = rows.getString(2);
pss = ps.getCheckPrintService(printer_name);
job = PrinterJob.getPrinterJob();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
sqlState.close();
rows.close();
} catch (Exception e) {
}
}
} else {
job = PrinterJob.getPrinterJob();
pss = job.getPrintService();
}
try {
job.setPrintService(pss);
} catch (PrinterException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
job.setPrintable(contentToPrint);
try {
job.print();
} catch (PrinterException e) {
System.err.println(e.getMessage());
}
}
}
公共类打印此账单{
公共静态无效打印卡(最终字符串账单){
可打印内容toprint=new Printable(){
@凌驾
公共整型打印(图形图形、页面格式、页面格式、整型页面)
抛出PrinterException{
如果(页面>0){
不返回此类页面;
}
设置方向(pageFormat.LANDSCAPE);
Graphics2D g2d=(Graphics2D)图形;
g2d.translate(pageFormat.GetImageTablex(),
getImageTabley());
g2d.setPaint(颜色:黑色);
g2d.setFont(新字体(“Arial”,Font.BOLD,10));
int y=15;
Font f=新字体(Font.SANS_SERIF,Font.PLAIN,8);
graphics.setFont(f);
对于(int i=0;i
我的第一个猜测是计算机无法识别打印机。当我使用Java进行热打印时,我会遇到这个问题,但我意识到打印机没有连接到我的计算机,或者我在代码中调用了错误的打印机
我的第二个猜测是,如果您试图打印Graphics2D对象或图像,则需要使用字节命令。热敏打印机的使用非常繁琐,因为实际上没有任何标准,人们很可能需要查看文档,了解如何打印条形码/剪切/更改字体等等
打印机的名称可能与您可能认为的名称大不相同。因此,我建议首先使用System.out.println()进行测试,以查看您使用的打印机,如果您还没有这样做,我还建议将您希望使用的热敏打印机设置为默认打印机
DocPrintJob job = PrintServiceLookup.lookupDefaultPrintService().createPrintJob();
System.out.println(job + " <- printer");
DocPrintJob job=PrintServiceLookup.lookupDefaultPrintService().createPrintJob();
System.out.println(作业+“请将您的代码简化为一个最小的示例。有关如何格式化账单的详细信息与连接到打印机无关。它是否说的不仅仅是“打印机不接受作业?”可能有数百个原因…@Fildor”打印机不接受作业“我得到的所有东西除了XPS,你试过其他型号的打印机吗?我不知道这是我测试的第一台热敏打印机(当我使用XPS工具“XPS提供的用于安装驱动程序时测试的软件”时,它工作”)@Fildor
public void PrintString(String s) throws Exception{
DocPrintJob job = PrintServiceLookup.lookupDefaultPrintService().createPrintJob();
//Get's the default printer so it must be set.
System.out.println(job + " <- printer");
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
byte[] b = s.getBytes("CP437");
//Get's the bytes from the String(So that characters such as å ä ö may be printed).
Doc doc = new SimpleDoc(b, flavor, null);
//Includes the content to print(b) and what kind of content it is (flavor, in this case a String turned into a byte array).
job.print(doc, null);
}