サーマルプリンター(Bixolon srp 350 plus)を使用してレシートを印刷および自動カットするJavaアプリケーションがあります
最初はレシートの自動カットに問題がありましたが、何度も試行錯誤してグーグル検索を行った結果、どういうわけかレシートを自動カットすることができました。しかし、問題は、warアプリケーションをテストマシンに展開すると、正常に印刷されますが、最後に紙が切れないことです。WARファイルを開発マシンのTomcatにデプロイしたところ、自動切断が正常に行われました。
開発マシンとテストマシンの両方がWindows7を使用しています-ultimate、同じapache-tomcat-6.0.18、およびJDK6/JRE6。
最初にテストマシンにjre6がインストールされていましたが、自動切断が失敗しました。開発マシンで使用していたjdk6をインストールしましたが、うまくいきませんでした。
2台のマシンは、ハードウェア構成が異なる異なるブランドのものです。誰かがこれについて私を助けてくれますか?これは、以前にインストールされたJRE6と関係があり、Windowsレジストリから適切に削除されていませんか?
私はmysql5.5と一緒にgrails1.3.7を使用しています。
私のコードは以下の通りです:
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();
}
}
誰かが自動切断機能を実装するためのより良い方法で私を助けることができれば、それは大きな助けになるでしょう。