2012-04-11 25 views
2

Ich bin eine kleine App entwickeln Daten in Ubuntu zu drucken, das Problem ist meine App in Windows funktioniert gut mit:Java Printing in Ubuntu

PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 

FileInputStream fis = new FileInputStream(myfile); 

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
DocPrintJob job = service.createPrintJob(); 

Doc doc = new SimpleDoc(fis, flavor, null); 
job.print(doc, null); 
fis.close(); 

jedoch in Ubuntu, es nur doesnt Druck. Gibt es eine spezielle Konfiguration für den Linux-Druck für die Druck-API, die ich verwende? Oder vermisse ich etwas anderes?

+0

Ihre Codes hier gearbeitet, wenn ich „myfile“ mit einem Pfad zu ersetzen, indem er auf eine Textdatei. Haben Sie den Drucker korrekt in Ihrem System installiert? Können Sie in anderen Anwendungen drucken? z.B. gedit, gvim ...? – Kent

+0

Ich kann vom Terminal mit cat "Dateiname" | drucken lpr ... Normalerweise ist "myfile" die Zeichenkette des Pfades, der aus einem geöffneten Dateidialog stammt ... – Sin5k4

+1

Ich habe das 'eclipse'-Tag entfernt. Dieses Tag ist speziell für Fragen zu Eclipse, der IDE, gedacht. – ArjunShankar

Antwort

2

Ich denke, dass Ihr Drucker als nicht standardmäßig in OS installiert ist. Überprüfen Sie, was Ihr "Service" ist. Sie können auch Drucker den Druckdialog, wie diese wählen:

PrintRequestAttributeSet pras = 
       new HashPrintRequestAttributeSet(); 
     DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_UTF_8; 
     PrintRequestAttributeSet aset = 
       new HashPrintRequestAttributeSet(); 
     aset.add(MediaSizeName.ISO_A4); 
     aset.add(new Copies(1)); 
     aset.add(Sides.ONE_SIDED); 
     aset.add(Finishings.STAPLE); 

     PrintService printService[] = 
       PrintServiceLookup.lookupPrintServices(flavor, pras); 
     PrintService defaultService = 
       PrintServiceLookup.lookupDefaultPrintService(); 
     PrintService service = ServiceUI.printDialog(null, 200, 200, 
       printService, defaultService, flavor, pras); 
     if (service != null) { 
      try { 
       FileInputStream fis = new FileInputStream("c://test.txt"); 
       DocAttributeSet das = new HashDocAttributeSet(); 
       Doc doc1 = new SimpleDoc(fis, flavor, das); 

       DocPrintJob job1 = service.createPrintJob(); 

       try { 
        job1.print(doc1, pras); 
       } catch (PrintException e) { 
        e.printStackTrace(); 
       } 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 

Einige Drucker Text DocFlavors nicht unterstützt, nur Bilder. Sie können auch einfach Drucken von HTML-Dateien OS native Methoden wie folgt aus:

if (Desktop.isDesktopSupported()){ 
    Desktop desktop = Desktop.getDesktop(); 
    if (desktop.isSupported(Desktop.Action.PRINT)) 
    { 
     try { 
      File html1 = new File("c://file1.html"); 
      desktop.print(html1); 
      desktop.print(html2); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

}

+0

Versucht den Dialog auch, es funktioniert einfach nicht, ich sehe den Drucker dort, wenn ich auf Drucken, keine Aufträge an meine Druckwarteschlange gesendet werden ... :( – Sin5k4

+0

Sorry, ich habe vergessen, DocFlavor zu "TEXT_PLAIN_UTF_8" zu ändern. oder versuche deine Daten als HTML zu drucken, ich habe das zur Antwort hinzugefügt. –