1

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

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

开发机和测试机都使用windows 7-ultimate,同样的apache-tomcat-6.0.18,JDK6/JRE6。

最初测试机器安装了jre6,自动切割后不成功。我安装了我在开发机器中使用的 jdk6,但没有成功。

两台机器不同品牌,硬件配置不同。谁能帮我解决这个问题?这是否与以前安装的 JRE6 和未从 Windows 注册表中正确删除有关?

我正在使用 grails 1.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();
    }


}

如果有人可以帮助我以更好的方式实现自动切割功能,那将是一个很大的帮助。

4

1 回答 1

0

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

于 2012-07-29T18:25:16.027 回答