2011-08-24 19 views
8

lp filename komutunu kullanırsam iyi çalıştığım bir dosyam var.javax.print kullanarak bardaklar üzerine yazdırma

Dosya, makbuz darbesi yazıcısı için bir ESC/P dosyasıdır. Bu linux yerli CUPS sürücüleri ve tüm bu çalışır.

javax.print API'sini kullanmaya çalışıyorum, böylece baskı üzerinde daha iyi bir kontrole sahip olabilirim ve Linux'u platform olarak kabul etmekteyim.

Ben adam ve veri türü (InputStream, byte[], Reader vs.) her türlü bildiği her DocFlavor kombinasyonu denedim

Sadece hep birlikte print() komutunu yok sayar ya da sadece boş bir levha dışarı çevirir ya kağıt. lp filename'u çalıştırmak mükemmel bir şekilde yazdırıyor,'un işlevsel eşdeğerini yapmak için javax.print'u nasıl alabilirim?

javax.print'u kullanarak ayarlamamış değilim Diğer "şeyleri" kullanabilirim ve cups4J'yi araştırmaya başlayabilirim ancak bana sadece Linux için izin verecek gibi görünüyor. çözüm.

Dosyada lp sistem komutunu verebilirdim, ancak daha iyi taneli denetime ihtiyacım var. Bunlar yazdırdığımız makbuz değil, biletler ve biletler $ 5,00 ile binlerce dolar arasında değişiyor. Şu anda bir yazdırma sorununu tespit edersek, işlemi iptal ederiz ve yazdırılan herhangi bir şey geçersizse, müşteri fotokopisini kaybederse yeni bir kopya yazdırmak için yeniden baskıları hafifçe ve çoğu zaman almazız. Oh, bunu yapmamızın nedeni, POS sistemini Windows'dan Linux'a ve yazıcıları seri portlar üzerinden doğrudan erişime sahip USB üzerinden yönetilen CUPS'e dönüştürmektir. İşte çalışmayan kodum. Herhangi bir yardım takdir edilir.

try { 
    // Find the default service 
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 

    PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 

    // Create the print job 
    DocPrintJob job = service.createPrintJob(); 
    InputStream in = new FileInputStream("/home/bart/real.escp"); 
    Doc docNew = new SimpleDoc(in,flavor,null); 

    // Monitor print job events; for the implementation of PrintJobWatcher, 
    // see Determining When a Print Job Has Finished 
    PrintJobWatcher pjDone = new PrintJobWatcher(job); 

    // Print it 
    job.print(docNew, null); 

    // Wait for the print job to be done 
    pjDone.waitForDone(); 

    // It is now safe to close the input stream 
    in.close(); 
} catch (PrintException e) { 
} catch (IOException e) { 
} 
+1

Baskı gönderin. Yazdırmamın bir kısmını yapmak için lpr komutuyla komut satırına bomba attım. Bir seçenek, dosyanızı Java gibi anlayacağınız bir formata dönüştürüp dönüştüremeyeceğinizi ve daha sonra javax.print dosyasını kullanıp kullanamayacağınızı görmek olabilir. – Mitch

+0

Bu, linux esc/p dönüştürücüsünün problemi olabilir, ancak lp komutu iyi yazdırıldığında neden rahatsız olursa, ESC/P'den (doğrudan yazıcıya beslenebilir) sorun çıkması gibi görünüyor -> PDF (yapmak Java Mutlu) -> ESC/P (sürücü aracılığıyla). ESC/P dosyalarını üretiyoruz. Neyse Cups4J ile harika çalışıyor, uygulamak için yaklaşık 15 dakika sürdü. Sanırım cups4J kullanacak ve diğer OS/yazdırma sistemi sorunları ile açılırlar. –

cevap

0

Ben cups4j ile iyiyim. Önce yazıcınızı alın.

try { 
     CupsClient client = new CupsClient("addressOfTheCupsServer", 631); 
     List<CupsPrinter> printers = client.getPrinters(); 
     if (printers.size() == 0) { 
      throw new RuntimeException("Cant list Printer"); 
     } 
     for (CupsPrinter cupsPrinter : printers) { 
      if (cupsPrinter.getName().equals("NameOfPrinter")) { 
       selectedPrinter = cupsPrinter; 
      } 
     } 
    }catch (Exception ignored){ 
     ignored.printStackTrace(); 
    } 
} 

Sonra baskı işini oluşturmak ve en iyi ihtimalle şüpheli olduğunu linux üzerinde Java dan yazıcıya

PrintJob printJob = new PrintJob.Builder(inputStream).jobName("Jobname").build(); 
    PrintRequestResult result = selectedPrinter.print(printJob); 
İlgili konular