2

I'm trying to print an HTML file my program generates, but it won't work. On Ubuntu, ".isSupported(Desktop.Action.PRINT)" return false, even though I have the gnome libraries installed, and on Windows 7, java throws the following exception:

java.io.IOException: Failed to print file:/C:/Users/user/Documents/document.html. Error message: Unspecified error

followed by a stacktrace. Below is the code, I'm using java.awt.Desktop.

File doc = DocumentComposer.writeDocument(new File(System.getProperty("user.dir") + File.separator + "docs" + File.separator + docName + ".html"), case, data);
        if (Desktop.isDesktopSupported())  
        {  
            Desktop desktop = Desktop.getDesktop();  
            if (desktop.isSupported(Desktop.Action.PRINT))  
            {  
                desktop.print(doc);
            }
            else
                printError();
    }
  else
    printError();

Any kind of help would be much appreciated :).

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
user1123530
  • 561
  • 3
  • 7
  • 17
  • Check: http://stackoverflow.com/questions/10107862/java-printing-in-ubuntu possible duplicate? – heikkim Aug 27 '12 at 11:34
  • No, my code doesn't work on Windows. Besides, he isn't using java.awt.Desktop. – user1123530 Aug 27 '12 at 11:39
  • is this DocumentComposer belongs to any third party component? – Sajith Aug 27 '12 at 11:42
  • 1
    It's just another class I have set up to generate the documents. The writeDocument method just creates the html file and returns the File reference. – user1123530 Aug 27 '12 at 11:45
  • IOException means that your first line(the one with DocumentComposer) is causing problem. Have you printed the big argument that goes into the writeDocument function? Perhaps, this argument is causing your code to break. – Shafi Aug 27 '12 at 11:46
  • please provide the code inside DocumentComposer class. – Sajith Aug 27 '12 at 11:49
  • The writeDocument method works just fine. The path is correct and the file itself shows up in Windows Explorer. Besides, if I change PRINT to BROWSE and desktop.print(doc); to desktop.open(doc); it works flawlessly, the document opens in my browser. – user1123530 Aug 27 '12 at 11:55

1 Answers1

6

I ended up not using java.awt.Desktop, it simply wouldn't work. Instead, I followed the instructions in this IBM tutorial, http://www.ibm.com/developerworks/java/library/j-mer0322/ . To be precise, the code I'm now using is the following (and it runs flawlessly on both Linux and Windows!):

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(), 200, 200,
                      printService, defaultService, flavor, pras);
if (service != null) {
    DocPrintJob job = service.createPrintJob();
    FileInputStream fis = new FileInputStream(doc);
    DocAttributeSet das = new HashDocAttributeSet();
    Doc document = new SimpleDoc(fis, flavor, das);
    job.print(document, pras);
}
james.garriss
  • 12,959
  • 7
  • 83
  • 96
user1123530
  • 561
  • 3
  • 7
  • 17