试图在热敏打印机的JAVA应用程序(Bixolon SRP350 plus)中实现自动切割功能时的奇怪行为

试图在热敏打印机的JAVA应用程序(Bixolon SRP350 plus)中实现自动切割功能时的奇怪行为,java,windows-7,thermal-printer,bixolon-printer,Java,Windows 7,Thermal Printer,Bixolon Printer,我有一个java应用程序,可以使用热敏打印机打印和自动剪切收据(Bixolon srp 350 plus) 起初,我在自动剪切收据方面遇到了问题,但经过多次尝试和谷歌搜索,我终于设法自动剪切了收据。但问题是,当我在我的测试机器中部署war应用程序时,它打印得很好,但最后没有切纸。我甚至将war文件部署到我的开发机器的tomcat中,它可以自动剪切 开发机器和测试机器都使用Windows7-ultimate、相同的apache-tomcat-6.0.18和JDK6/JRE6 最初,试验机安装了jr

我有一个java应用程序,可以使用热敏打印机打印和自动剪切收据(Bixolon srp 350 plus)

起初,我在自动剪切收据方面遇到了问题,但经过多次尝试和谷歌搜索,我终于设法自动剪切了收据。但问题是,当我在我的测试机器中部署war应用程序时,它打印得很好,但最后没有切纸。我甚至将war文件部署到我的开发机器的tomcat中,它可以自动剪切

开发机器和测试机器都使用Windows7-ultimate、相同的apache-tomcat-6.0.18和JDK6/JRE6

最初,试验机安装了jre6,自动切割后未成功。我在开发机器中安装了jdk6,但没有成功

这两台机器的品牌不同,硬件配置也不同。 谁能帮我一下吗?这是否与以前安装的JRE6有关,并且没有从windows注册表中正确删除

我正在使用Grails1.3.7和mysql 5.5

我的代码如下:

public void printBill(String printData) throws Exception {
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();    
    pras.add(new Copies(5));    
    pras.add(new PrinterResolution(180,180,PrinterResolution.DPI)); 


    PrintService pss[] = PrintServiceLookup.lookupPrintServices(null,pras);    
    if (pss.length == 0)    {
        throw new RuntimeException("No printer services available."); 
    }

    if(printData == null) {
        throw new Exception("nothing to print");
    }

    PrintService ps = pss[0];    

    DocPrintJob job = ps.createPrintJob();
    DocAttributeSet das = new HashDocAttributeSet();    
    das.add(new PrinterResolution(180,180,PrinterResolution.DPI));

    byte[] desc = printData.getBytes();
    Doc doc = new SimpleDoc(desc, DocFlavor.BYTE_ARRAY.AUTOSENSE, das);    

    try {
        job.print(doc, pras);
        cutPaper();
    } catch (Exception e) {
        e.printStackTrace();
    } 
}

/*
 *  TODO improvision to auto cut bill, need to find a proper way to cut
 */
private  void cutPaper() throws Exception{
    TempPageCutter pageCutter = new RestaurantPrinter().new TempPageCutter();

    pageCutter.cutReceipt();

}

private class TempPageCutter implements Printable {

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

        System.out.println("Cutting");
        graphics.drawString("", 0, 0);

        return PAGE_EXISTS;
    }

    public void cutReceipt() throws PrinterException {
        System.out.println("cutReceipt");
        PrintService[]  printService =  PrinterJob.lookupPrintServices();

        if(printService == null || printService.length < 1) {
            return;
        }
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrintable(this);
        job.print();
    }


}
public void printBill(字符串printData)引发异常{
PrintRequestAttributeSet pras=新的HashPrintRequestAttributeSet();
审慎监管局增加(新副本(5));
pras.add(新的PrinterResolution(180180,PrinterResolution.DPI));
PrintService pss[]=PrintServiceLookup.lookupPrintServices(null,pras);
如果(pss.length==0){
抛出新的RuntimeException(“没有可用的打印机服务”);
}
if(printData==null){
抛出新异常(“无需打印”);
}
PrintService ps=pss[0];
DocPrintJob job=ps.createPrintJob();
DocAttributeSet das=新的HashDocAttributeSet();
添加(新的PrinterResolution(180180,PrinterResolution.DPI));
byte[]desc=printData.getBytes();
Doc Doc=new SimpleDoc(desc,DocFlavor.BYTE_ARRAY.AUTOSENSE,das);
试一试{
作业打印(文档、pras);
剪纸();
}捕获(例外e){
e、 printStackTrace();
} 
}
/*
*要改进自动削减账单,需要找到适当的方式削减
*/
私有void cutPaper()引发异常{
TempPageCutter pageCutter=新餐厅餐厅餐厅()。新TempPageCutter();
pagecuter.cutReceipt();
}
私有类TempPageCutter实现可打印{
@凌驾
公共整型打印(图形、页面格式、页面格式、整型页面索引)
抛出PrinterException{
如果(页面索引>0)
不返回此类页面;
系统输出打印(“切割”);
图形.抽绳(“”,0,0);
返回页面_存在;
}
public void cutreceive()引发PrinterException{
系统输出打印项次(“剪切收据”);
PrintService[]PrintService=PrinterJob.lookupPrintServices();
if(printService==null | | printService.length<1){
返回;
}
PrinterJob job=PrinterJob.getPrinterJob();
作业。可设置打印(此);
job.print();
}
}

如果有人能帮助我更好地实现自动剪切功能,那将是一个很大的帮助。

我能够通过在windows 7打印机设置页面中将bixolon srp 350 plus打印机设置为默认打印机来解决自动剪切问题。还是有点奇怪。如果有人能帮助我更好地实现自动切割功能,这仍然是一个很大的帮助。干杯

你需要一个jar文件来使用bixolon打印机打印吗?我有一个,想用java打印到它…没有必要。但是,如果您使用web浏览器打印,我使用QZ打印,它非常好。但是,如果您想从java应用程序打印,那么您必须将细节与打印大小对齐,并且只需调用java api即可。我将PrintService与DocPrintJob和其他Java类一起使用。您是如何剪纸的?我使用的是D420,打印似乎正常,但纸张只是不断进纸,进纸大约1米,然后错误地停止。我想我需要强制剪切,如果你有一个例子,那就太好了。我使用上面的代码来剪切纸张,但正如我所说的,我在剪切时遇到了一些问题,但通过将打印机设置为默认打印机,我能够解决它。我以前从未使用过使用JAVA的Bixolon打印机。你能给我一个开胃酒吗?一个简单的例子如何使用JAVA打印。