Javax.print

hi
In which jar can i find the following packages?
javax.print.*;
javax.print.attribute.*;
javax.print.attribute.standard.*;
javax.print.event.*;

Hi ,
I am getting the following error when accessing the DOCFlavor method of the javax.print package.I am using j2sdk1.4.1_02.I am in urgent need of this code.Please help
D:\JavaSCTest>javac PrintToStream.java
PrintToStream.java:16: cannot access javax.print.DocFlavor
bad class file: c:\j2sdk1.4.1_02\jre\lib\rt.jar(javax/print/DocFlavor.class)
class file has wrong version 48.0, should be 47.0
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
DocFlavor flavor = new DocFlavor("image/gif","java.io.InputStream");
^
1 error

Similar Messages

  • How can I print a html Using javax.print

    Hi friends,
    I am in big trouble . I use following code to print a html file using javax.print api.
    import java.io.*;
    import javax.print.*;
    import javax.print.attribute.*;
    import javax.print.attribute.standard.*;
    import javax.print.event.*;
    public class PrintPS
         public static void main(String args[]) {
              PrintPS html = new PrintPS();
         public PrintPS() {
         DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_HTML_HOST;
         PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
         aset.add(MediaSizeName.ISO_A4);
         aset.add(new Copies(1));
         aset.add(MediaTray.MAIN);
         PrintService pservices = PrintServiceLookup.lookupDefaultPrintService();
         if(pservices==null)
              System.out.println(" printer not found");
         if (pservices!= null) {
         System.out.println("selected printer " + pservices.getName());
         DocPrintJob pj = pservices.createPrintJob();
         try {
         InputStream fis = new FileInputStream("abc.html");
         Doc doc = new SimpleDoc(fis, flavor, null);
    System.out.println("printing started ");
         pj.print(doc, aset);
    System.out.println("printing completed");
         } catch (IOException ie) {
         System.err.println(ie);
         } catch (PrintException e) {
         System.err.println(e);
    This code gives me "sun.print.PrintJobFlavorException: invalid flavor"
    So i use all four TEXT_HTML flavor but i do not find the solution.
    I am able to print pdf, jpg, gif files but i can not able to print txt and html file.
    My printer supports txt and html printing becaue i do printing directolly by browser's or notpad's print command .

    Hi friends,
    I am in big trouble . I use following code to print a
    html file using javax.print api.Use Code Tags
    http://forum.java.sun.com/help.jspa?sec=formatting
    My printer supports txt and html printing becaue i do
    printing directolly by browser's or notpad's print
    command .Notepad & your browser prob. convert to the HTML/text(1) into the printers native format.
    1) I am suprised that it does not print text.

  • Javax.print problem: data not of declared type

    Hi all,
    I'm trying to print a simple text-only document with the below code but it keeps giving me an illegal argument exception. By the way, I've tried all the combinations of DocFlavor.*.* and SERVICE_FORMATTED.PRINTABLE and SERVICE_FORMATTED.PAGEABLE are the only ones working for me. Is this normal?
    Thanks!
    IllegalArgumentException:
    java.lang.IllegalArgumentException: data is not of declared type
            at javax.print.SimpleDoc.<init>(SimpleDoc.java:82)
            at DiagnosticsPane.actionPerformed(DiagnosticsPane.java:350)
    import java.io.*;
    import javax.print.*;
    import javax.print.attribute.*;
    class testPrint
         public static void main(String args[])
              PrintRequestAttributeSet pras =     new HashPrintRequestAttributeSet();
              DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
              PrintService ps[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
              PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
              PrintService service = ServiceUI.printDialog(null, 200, 200, ps, defaultService, flavor, pras);
              if (service != null) {
                   try {
                        DocPrintJob job = service.createPrintJob();
                        DocAttributeSet das = new HashDocAttributeSet();
                        FileInputStream fis = new FileInputStream("report.txt");
                        Doc doc = new SimpleDoc(fis, flavor, das);
                        try {
                             job.print(doc, pras);
                             System.err.println("Job sent to printer.");
                        } catch (PrintException e) {
                             System.err.println("Print error!\n\n" + e.getMessage());
                   } catch (FileNotFoundException e) {
                        System.err.println("File not found!\n\n" + e.getMessage());
    }

    Hi duffymo,
    I've tried all the available DocFlavors and even wrote a little program to list all my supported DocFlavors. And, I've only got 2 available for each of my printers, one being a Canon i320 and the other is a Adobe PDF printer.
    import javax.print.*;
    import javax.print.attribute.*;
    class listDocFlavor
      public static void main(String args[])
        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
        DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
        PrintService ps[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
        for (int j = 0; j < ps.length; j++) {
          DocFlavor df[] = ps[j].getSupportedDocFlavors();
          for (int i = 0; i < df.length; i++)
            System.err.println(j + ": " + df);
    0: application/x-java-jvm-local-objectref; class="java.awt.print.Pageable"
    0: application/x-java-jvm-local-objectref; class="java.awt.print.Printable"
    1: application/x-java-jvm-local-objectref; class="java.awt.print.Pageable"
    1: application/x-java-jvm-local-objectref; class="java.awt.print.Printable"

  • PDF printing using javax.print

    Hi!
    I need to create an aplication that generates a PDF document and then prints it. For creating the PDF doc, I use the iText package.
    I have some problems with printing. I don't know how to print the document I generate. Could you give me a hint please? (I can print GIF docs, yet I do not know how to convert the PDF to GIF).
    Thanks in advance,
    Alex

    import javax.print.*;
    import javax.print.attribute.DocAttributeSet;
    import javax.print.attribute.HashDocAttributeSet;
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.print.attribute.PrintRequestAttributeSet;
    import javax.print.attribute.standard.Copies;
    import javax.print.attribute.standard.MediaSizeName;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    public class PDFfilePrinter {
    public static void main(String[] args) {
    DocAttributeSet fset = new HashDocAttributeSet();
    PrintRequestAttributeSet pset = new HashPrintRequestAttributeSet();
    String filename = "somefile.pdf"; //name of file to print
    DocFlavor docf = DocFlavor.INPUT_TYPE.PDF;
    PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
    if (0 < services.length) {
    DocPrintJob printer = services[0].createPrintJob(); //default printer on my system
    try {
    FileInputStream fis = new FileInputStream(filename);
    Doc toprint = new SimpleDoc(fis, docf, fset);
    pset.add(MediaSizeName.ISO_A4);
    pset.add(new Copies(1));
    printer.print(toprint, pset);
    } catch (PrintException e) {
    e.printStackTrace();
    } catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
    Here's the code I'm working with for printing. This stuff works .... in a very strange way - it prints out all sort of crazy characters. I know I am doing something wrong and I think it's all in this line:
    DocFlavor docf = DocFlavor.INPUT_TYPE.PDF;
    Should I use a different flavor? I read somewhere that the PDF file format is not entirely supported bye javax.print. Could this be the problem?
    Thanks in advance,
    Alex

  • Javax.print problems on applet - bug on mac os implementation?

    Dear All,
    I am working on an applet and application that include a print function and I get a weird behaviour on MacOS in applet mode (both with Safari and Firefox - Mac OS X Versione 10.4.9 (Build 8P135) ). In contrast, things work fine on Windows XP (both Explorer 7 and Firefox with Java Plug-in 1.6.0_01) and even in MacOS when using the application.
    The problems are:
    - the print dialogue goes on and off a few times before letting the user interact with it
    - the page format in the dialogue is set to A5 (instead of the printer's default)
    - there is a small empty window appearing together with the dialogue and not disappearing even after the applet is closed
    Is this a known problem? If so, are there work-arounds?
    (I had no luck on Google about this)
    To reproduce the problem I created a stripped down version of the applet, in 2 files, I report it at the bottom of this message. I am using a modified version the PrintUtilities class from http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-Printing.html
    Am I doing something wrong? Or shall I consider submitting a bug report?
    Any suggestion is welcome! Please let me know if I should provide more detailed information.
    Thank you in advance,
    Enrico
    PrintMe.java
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JApplet;
    import javax.swing.JPanel;
    public class PrintMe extends JApplet implements MouseListener{
         private static final long serialVersionUID = 1L;
         private JPanel jContentPane = null;
         public PrintMe() {
              super();
         private class MyComponent extends JPanel{
              private static final long serialVersionUID = 1L;
              public void paintComponent(Graphics g) {
                   super.paintComponent(g);
                  Graphics2D g2 = (Graphics2D) g;
                  g2.setColor(Color.black);
                  g2.drawString( "Test text", 0, g2.getFontMetrics().getHeight() );
         public void init() {
              MyComponent aComponent = new MyComponent();
              jContentPane = new JPanel();
              jContentPane.setLayout(new BorderLayout());
              jContentPane.add(aComponent);
              this.setContentPane(jContentPane);
              this.addMouseListener(this);
         public void print(){
              try{
                   PrintUtilities.printComponent(this);
              }catch (Exception e) {
                   e.printStackTrace();
         public void mouseClicked(MouseEvent e) {
              print();
         public void mouseEntered(MouseEvent e) {
              // not used
         public void mouseExited(MouseEvent e) {
              // not used
         public void mousePressed(MouseEvent e) {
              // not used
         public void mouseReleased(MouseEvent e) {
              // not used
    PrintUtilities.java
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.print.PageFormat;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.print.attribute.PrintRequestAttributeSet;
    import javax.swing.RepaintManager;
    import javax.swing.RootPaneContainer;
    /** A simple utility class that lets you very simply print
    *  an arbitrary component. Just pass the component to the
    *  PrintUtilities.printComponent. The component you want to
    *  print doesn't need a print method and doesn't have to
    *  implement any interface or do anything special at all.
    *  If you are going to be printing many times, it is marginally more
    *  efficient to first do the following:
    *    PrintUtilities printHelper = new PrintUtilities(theComponent);
    *  then later do printHelper.print(). But this is a very tiny
    *  difference, so in most cases just do the simpler
    *  PrintUtilities.printComponent(componentToBePrinted).
    *  7/99 Marty Hall, http://www.apl.jhu.edu/~hall/java/
    *  May be freely used or adapted.
    public class PrintUtilities implements Printable {
         private Component componentToBePrinted;
         public static void printComponent(Component c) {
              new PrintUtilities(c).print();
         public PrintUtilities(Component componentToBePrinted) {
              this.componentToBePrinted = componentToBePrinted;
         public void print() {
              try{
                   PrinterJob printJob = PrinterJob.getPrinterJob();
                   printJob.setPrintable(this);
                   PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
                   if( printJob.printDialog(attributes) ){
                        try {
                             printJob.setJobName("MyName");
                             printJob.print(attributes);
                        } catch(PrinterException pe) {
                             System.err.println("Error printing: " + pe);
                             pe.printStackTrace();
              }catch (Exception e) {
                   e.printStackTrace();
         public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
              if (pageIndex > 0) {
                   return(NO_SUCH_PAGE);
              } else {
                   RootPaneContainer rpc = (RootPaneContainer)(this.componentToBePrinted);
                   rpc.getRootPane().getGlassPane().setVisible( false );
                   Graphics2D g2d = (Graphics2D)g;
                   double sy = pageFormat.getImageableHeight() / componentToBePrinted.getHeight();
                   double sx = pageFormat.getImageableWidth() / componentToBePrinted.getWidth();
                   if( sx > sy ){
                        sx = sy;
                   }else{
                        sy = sx;
                   g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
                   g2d.scale(sx, sy);
                   disableDoubleBuffering(componentToBePrinted);
                   componentToBePrinted.paint(g2d);
                   enableDoubleBuffering(componentToBePrinted);
                   return(PAGE_EXISTS);
         /** The speed and quality of printing suffers dramatically if
          *  any of the containers have double buffering turned on.
          *  So this turns if off globally.
          *  @see enableDoubleBuffering
         public static void disableDoubleBuffering(Component c) {
              RepaintManager currentManager = RepaintManager.currentManager(c);
              currentManager.setDoubleBufferingEnabled(false);
         /** Re-enables double buffering globally. */
         public static void enableDoubleBuffering(Component c) {
              RepaintManager currentManager = RepaintManager.currentManager(c);
              currentManager.setDoubleBufferingEnabled(true);
    }

    Trying to answer to myself..
    Is it possible that the problems are due to me mixing java.awt.print and javax.swing.print ?

  • Cannot import javax.print.*;

    Hi All,
    I have to send a file to printer Directly.
    For this i want to use java print service API.
    I installed J2SE 1.4.2
    But i could not import javax.print.*;
    Plese help me.

    The package javax.print was added in Java version 1.4, so if you are using 1.4.2 you should be able to use it.
    Are you sure you are using Java 1.4.2? Don't you have another version of Java installed somewhere? Open a command prompt and type:
    java -version
    Which version does it say you're using?

  • Any one uses javax.print API and works?

    I have just downloaded 1.4 beta2 SDK and imported all the javax.print classes. I use the most simple test code as the following:
    FileInputStream fis = new FileInputStream("test.txt");
    try {
    DocFlavor psInFormat = DocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCII;
    Doc myDoc = new SimpleDoc(fis, psInFormat, null);
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
    aset.add(new Copies(1));
    aset.add(MediaSizeName.ISO_A4);
    aset.add(Sides.ONE_SIDED);
    PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset);
    if (services.length > 0) {
    DocPrintJob job = services[0].createPrintJob();
    job.print(myDoc, aset);
    } catch (Exception e) {System.out.println(e.getMessage());}
    However, PrintServiceLookup.lookupPrintServices can't find my printer. I have 9 network printers connected to my system which range from HP LaserJet 4500 to 8100 and Acrobat PDFWriter. The API can't find any of my printer? What did I do wrong

    Hi Guys,
    First,
    If your trying to print any document sent by the server from the client machine u have to write a applet which recieves the output in form of stream and then print it. I could do these with JPEG, GIF and ASCII but could not do it with PDF (The sun doesn't have a implementation for PDF document printing, they just have a declaration may future released will help us print PDF).
    If u want the Print dialog box to appear use the following code that worked fine for me.
    public class SomeClass
    public static void main(String args[]) throws Exception
    PrintRequestAttributeSet pras =     new HashPrintRequestAttributeSet();
    DocFlavor flavor = DocFlavor.INPUTSTREAM.GIF;
    PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
    PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
    PrintService service = ServiceUI.printDialog(null, 200, 200,printService, defaultService, flavor, pras);
    if (defaultService != null)
    DocPrintJob job = defaultService.createPrintJob();
    FileInputStream fis = new FileInputStream("somefile.GIF");
    DocAttributeSet das = new HashDocAttributeSet();
    Doc doc = new SimpleDoc(byteArrayOutputStream, flavor, das);
    job.print(doc, pras);
    Thread.sleep(10000);
    If u do not want the dialog box to appear and just print to the default printer of the local machine use the following code
    public class SomeClass
    public static void main(String args[]) throws Exception
    PrintRequestAttributeSet pras =     new HashPrintRequestAttributeSet();
    DocFlavor flavor = DocFlavor.INPUTSTREAM.GIF;
    PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
    if (defaultService != null)
    DocPrintJob job = defaultService.createPrintJob();
    FileInputStream fis = new FileInputStream("somefile.GIF");
    DocAttributeSet das = new HashDocAttributeSet();
    Doc doc = new SimpleDoc(byteArrayOutputStream, flavor, das);
    job.print(doc, pras);
    Thread.sleep(10000);
    Mean while if some body comes across any tweaks to print PDF documents using j2se1.4 please write to me at
    [email protected]
    Regards,
    Madhu

  • Using Javax.print I have to print the data which are stored in resultsets.

    Using Javax.print I have to print the data which are stored in resultsets.
    Actually we ar working on a project where n numbers of records are fetched from database and stored in Resultsets. We made JSF pages which displayes the records in Web Browser.
    There is a link in that page. If we click that print link, It has to be printed all the records row by row using javax.print. It should act like Printer friendly in browser.
    Kindly send us any example code to proceed.

    Is it possible to access the cache datasource inside the script component which is available in the same data flow task??
    Thanks in advance,
    Saravanan

  • Javax.print binary format

    HI!
    I know there are several posts about javax.print and the binary format, but i found nothing that helps me.
    I'm trying to print a txt file
    public class print{
         public static void main(String args[]){
    //          Input the file
         InputStream textstream=null;
         try {
              textstream = new BufferedInputStream(new FileInputStream("test.txt"));
         catch (FileNotFoundException ffne) {
              ffne.printStackTrace();     
    //          Set the document type
         DocFlavor myFormat = DocFlavor.INPUT_STREAM.TEXT_PLAIN_UTF_8;
    //          Create a Doc
         Doc myDoc = new SimpleDoc(textstream, myFormat, null);
    //          Build a set of attributes
         PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
         aset.add(new Copies(5));
         aset.add(MediaSizeName.ISO_A4);
         PrintService services =
              PrintServiceLookup.lookupPrintServices(myFormat, aset);
    //          Create a print job from one of the print services
         if (services.length > 0) {
              DocPrintJob job = services.createPrintJob();
              try {
                   job.print(myDoc, aset);
              catch (PrintException pe) {
                   pe.printStackTrace();
         else
         System.out.println("!hello");
    What's wrong witht this code?
    If I run it I get the output hello which meas that there is no printer to handle the file.
    Does anybody know a good tutorial about printing files?
    Pls help
    Thanks Jerome

    There's a long standing thread under Advanced Language Topics:
    javax.print and binary formats
    I'm surprised that a search of the forums didn't turn it up. - MOD

  • Find the network printer print jobs names using  the javax.print

    hi friend ,
    i have a problem to find the network printer printjobs names using javax.prrint pacakge. And give the best sites for example of javax.print.

    Iterate the array from:
    PrintService[] services = PrintServiceLookup.lookupPrintServices( null, null );

  • Extendingng the javax.print.attribute.standard

    Hello All,
    How do I programatticaly invoke a feature in a printer using Java Print Service API which is currently not available as of now in javax.print.attribute.standard package.The API documentation speaks about extending the Attribute class for the new feature or for a new value for the existing attribute.
    I am feeling stuck when i want to implement 'Reverse order printing' . This feature is not currently supported in the standard JDK.
    How do I go about it?
    We have a workaround if we use java.awt.Printable interface and manually reverse the pages. But I want the printer to take care of the actual reversing of the data.
    Appreciate if anybody can help me on this.
    thanks in advance
    Sinoj.

    You get out your printer manual and check if your printer will do this or not, if it does, then look up the codes that the printer requires to do that task. If it doesn't do it, then go buy a printer that does support it and look up the codes that the printer requires to do that task. Once you have the codes that are required to do that task, then check if there are any special signals (pin activations and etc) that need to be sent to enable that mode. If there are no special signals that are needed to enable that mode, then send the codes to the printer. If you need special signals, then your probably looking at a JNI module for your project to generate the special signals needed.

  • Javax.print.PrintServiceLookup operation

    I am trying to find out where this method gets the printServices from. I have an application that is run on three different os's and most likely 3 different versions of java.
    box1: Debian Sarge(3.1) , jdk1.6.0_14, cups 1.1.23
    box2: Debian Lenny/Sid, jdk1.6.0.07, cups 1.3.7
    box3: Ubuntu 9.04, jdk1.6.0_14, cups 1.3.9
    cups server: Debian Lenny cups 1.3.8
    All printers are broadcast from the cups server , box1-3 only see the broadcast printers.
    My program is able to print on box1 and 2 to the three printers shared via the cups server that I want it too.(sales,invoicing,shipping).
    When I try and print to either invoicing or shipping(sales is the default on all boxes) I get an error and the job is sent to the default.
    PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
    for (int j=0; j<services.length;j++) {
    logger.debug("Printer returned from system: " + services[j].getName());
    if (services[j].getName().equals(cmbPrinters.getSelectedItem())){
    selectedPrinterService = services[j];
    my logger output shows that an array of length 5 is returned(that is right, a total of 6 printers on the system) but only services[0] has an entry, sales. The rest of the positions are null.
    I am trying to figure out where PrintServiceLookup gets this information, I have found that this same problem holds true for any other Ubunutu 9.04 box that I set up around here.
    lpstat -v shows all of the printers shared via the cups server, the default sales is not listed as the first position so I am not sure if PrintServiceLookup just moves the default system printer into this location or not.
    Thank you.
    Grant

    you got me, I did have a question. I was trying to figure out where javax.print.PrintServiceLookup.lookupPrintServices got the returned PrintServices from. I can not figure out why my printers all work from other programs on all my servers, but inside this one program, the one everyone here uses I can only print to the default printer when using box3, but print to the printer of my choice on box 1 and 2. Basically what is lookupPrinterServices() checking to find out what printers are available.

  • Javax.print postscript support

    The DocFlavors supported by the print services I've queried using the javax.print package haven't included the specific Postscript DocFlavor. They all return the autosense DocFlavor though. Some of these printers will automatically detect and print postscript and some won't but I haven't been able to tell until I actually send the print job to the printer. How widely supported is postscript on current printers or where can I go to find this information? Are there other ways to determine programmatically what formats a printer supports?

    Hey how you find in answer for this yet please let me know as soon as possible thanks.

  • Printing HTML to PS with javax.print

    Hi
    I'm trying to convert an .html file to .ps with javax.print.*,
    but I think that I need an html printer driver that support my Flavor HTML_UTF_*
    did anyone made this conversion ?
    do you any idea about this driver, and when can I download it?
    thanks ;)

    Doc doc = new SimpleDoc(book, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);I am really new to this and have not tried printing using the print service API, but from the little JavaDoc I can understand on these classes, it seems that you are saying you'll be providing a print object that implements Printable, but then you are actually passing in a Book object, which does NOT implement Printable (It implements Pageable.).
    So maybe try changing the DocFlavor to DocFlavor.SERVICE_FORMATTED.PAGEABLE ?

  • Help needed:Printing HTML file using javax.print

    Hi
    I am using the following code which i got form the forum for rpinting an HTML file.
    The folllowing code is working fine, but the problem is the content of HTML file is not getting printed. I am geeting a blank page with no content. What is the change that is required in the code? ALso is there any simpler way to implement this. Help needed ASAP.
    public boolean printHTMLFile(String filename) {
              try {
                   JEditorPane editorPane = new JEditorPane();
                   editorPane.setEditorKit(new HTMLEditorKit());
                   //editorPane.setContentType("text/html");
                   editorPane.setSize(500,500);
                   String text = getFileContents(filename);
                   if (text != null) {
                        editorPane.setText(text);                    
                   } else {
                        return false;
                   printEditorPane(editorPane);
                   return true;
              } catch (Exception tce) {
                   tce.printStackTrace();
              return false;
         public String getFileContents(String filename) {
              try {
                   File file = new File(filename);
                   BufferedReader br = new BufferedReader(new FileReader(file));
                   String line;
                   StringBuffer sb = new StringBuffer();
                   while ((line = br.readLine()) != null) {
                        sb.append(line);
                   br.close();
                   return sb.toString();
              } catch (Exception tce) {
                   tce.printStackTrace();
              return null;
         public void printEditorPane(JEditorPane editorPane) {
                   try {
                        HTMLPrinter htmlPrinter = new HTMLPrinter();
                        htmlPrinter.printJEditorPane(editorPane, htmlPrinter.showPrintDialog());
                   } catch (Exception tce) {
                        tce.printStackTrace();
         * Sets up to easily print HTML documents. It is not necessary to call any of the setter
         * methods as they all have default values, they are provided should you wish to change
         * any of the default values.
         public class HTMLPrinter {
         public int DEFAULT_DPI = 72;
         public float DEFAULT_PAGE_WIDTH_INCH = 8.5f;
         public float DEFAULT_PAGE_HEIGHT_INCH = 11f;
         int x = 100;
         int y = 80;
         GraphicsConfiguration gc;
         PrintService[] services;
         PrintService defaultService;
         DocFlavor flavor;
         PrintRequestAttributeSet attributes;
         Vector pjlListeners = new Vector();
         Vector pjalListeners = new Vector();
         Vector psalListeners = new Vector();
         public HTMLPrinter() {
              gc = null;
              attributes = new HashPrintRequestAttributeSet();
              flavor = null;
              defaultService = PrintServiceLookup.lookupDefaultPrintService();
              services = PrintServiceLookup.lookupPrintServices(flavor, attributes);
              // do something with the supported docflavors
              DocFlavor[] df = defaultService.getSupportedDocFlavors();
              for (int i = 0; i < df.length; i++)
              System.out.println(df.getMimeType() + " " + df[i].getRepresentationClassName());
              // if there is a default service, but no other services
              if (defaultService != null && (services == null || services.length == 0)) {
              services = new PrintService[1];
              services[0] = defaultService;
         * Set the GraphicsConfiguration to display the print dialog on.
         * @param gc a GraphicsConfiguration object
         public void setGraphicsConfiguration(GraphicsConfiguration gc) {
              this.gc = gc;
         public void setServices(PrintService[] services) {
              this.services = services;
         public void setDefaultService(PrintService service) {
              this.defaultService = service;
         public void setDocFlavor(DocFlavor flavor) {
              this.flavor = flavor;
         public void setPrintRequestAttributes(PrintRequestAttributeSet attributes) {
              this.attributes = attributes;
         public void setPrintDialogLocation(int x, int y) {
              this.x = x;
              this.y = y;
         public void addPrintJobListener(PrintJobListener pjl) {
              pjlListeners.addElement(pjl);
         public void removePrintJobListener(PrintJobListener pjl) {
              pjlListeners.removeElement(pjl);
         public void addPrintServiceAttributeListener(PrintServiceAttributeListener psal) {
              psalListeners.addElement(psal);
         public void removePrintServiceAttributeListener(PrintServiceAttributeListener psal) {
              psalListeners.removeElement(psal);
         public boolean printJEditorPane(JEditorPane jep, PrintService ps) {
                   if (ps == null || jep == null) {
                        System.out.println("printJEditorPane: jep or ps is NULL, aborting...");
                        return false;
                   // get the root view of the preview pane
                   View rv = jep.getUI().getRootView(jep);
                   // get the size of the view (hopefully the total size of the page to be printed
                   int x = (int) rv.getPreferredSpan(View.X_AXIS);
                   int y = (int) rv.getPreferredSpan(View.Y_AXIS);
                   // find out if the print has been set to colour mode
                   DocPrintJob dpj = ps.createPrintJob();
                   PrintJobAttributeSet pjas = dpj.getAttributes();
                   // get the DPI and printable area of the page. use default values if not available
                   // use this to get the maximum number of pixels on the vertical axis
                   PrinterResolution pr = (PrinterResolution) pjas.get(PrinterResolution.class);
                   int dpi;
                   float pageX, pageY;
                   if (pr != null)
                        dpi = pr.getFeedResolution(PrinterResolution.DPI);
                   else
                        dpi = DEFAULT_DPI;
                   MediaPrintableArea mpa = (MediaPrintableArea) pjas.get(MediaPrintableArea.class);
                   if (mpa != null) {
                        pageX = mpa.getX(MediaPrintableArea.INCH);
                        pageY = mpa.getX(MediaPrintableArea.INCH);
                   } else {
                        pageX = DEFAULT_PAGE_WIDTH_INCH;
                        pageY = DEFAULT_PAGE_HEIGHT_INCH;
                   int pixelsPerPageY = (int) (dpi * pageY);
                   int pixelsPerPageX = (int) (dpi * pageX);
                   int minY = Math.max(pixelsPerPageY, y);
                   // make colour true if the user has selected colour, and the PrintService can support colour
                   boolean colour = pjas.containsValue(Chromaticity.COLOR);
                   colour = colour & (ps.getAttribute(ColorSupported.class) == ColorSupported.SUPPORTED);
                   // create a BufferedImage to draw on
                   int imgMode;
                   if (colour)
                        imgMode = BufferedImage.TYPE_3BYTE_BGR;
                   else
                        imgMode = BufferedImage.TYPE_BYTE_GRAY;
                   BufferedImage img = new BufferedImage(pixelsPerPageX, minY, imgMode);
                   Graphics myGraphics = img.getGraphics();
                   myGraphics.setClip(0, 0, pixelsPerPageX, minY);
                   myGraphics.setColor(Color.WHITE);
                   myGraphics.fillRect(0, 0, pixelsPerPageX, minY);
                        java.awt.Rectangle rectangle=new java.awt.Rectangle(0,0,pixelsPerPageX, minY);
                   // call rootView.paint( myGraphics, rect ) to paint the whole image on myGraphics
                   rv.paint(myGraphics, rectangle);
                   try {
                        // write the image as a JPEG to the ByteArray so it can be printed
                        Iterator writers = ImageIO.getImageWritersByFormatName("jpeg");
                        ImageWriter writer = (ImageWriter) writers.next();
                                       // mod: Added the iwparam to create the highest quality image possible
                        ImageWriteParam iwparam = writer.getDefaultWriteParam();
                        iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT) ;
                        iwparam.setCompressionQuality(1.0f); // highest quality
                        ByteArrayOutputStream out = new ByteArrayOutputStream();
                        ImageOutputStream ios = ImageIO.createImageOutputStream(out);
                        writer.setOutput(ios);
                        // get the number of pages we need to print this image
                        int imageHeight = img.getHeight();
                        int numberOfPages = (int) Math.ceil(minY / (double) pixelsPerPageY);
                        // print each page
                        for (int i = 0; i < numberOfPages; i++) {
                             int startY = i * pixelsPerPageY;
                             // get a subimage which is exactly the size of one page
                             BufferedImage subImg = img.getSubimage(0, startY, pixelsPerPageX, Math.min(y - startY, pixelsPerPageY));
                                                 // mod: different .write() method to use the iwparam parameter with highest quality compression
                             writer.write(null, new IIOImage(subImg, null, null), iwparam);
                             SimpleDoc sd = new SimpleDoc(out.toByteArray(), DocFlavor.BYTE_ARRAY.JPEG, null);
                             printDocument(sd, ps);
                             // reset the ByteArray so we can start the next page
                             out.reset();
                   } catch (PrintException e) {
                        System.out.println("Error printing document.");
                        e.printStackTrace();
                        return false;
                   } catch (IOException e) {
                        System.out.println("Error creating ImageOutputStream or writing to it.");
                        e.printStackTrace();
                        return false;
                   // uncomment this code and comment out the 'try-catch' block above
                   // to print to a JFrame instead of to the printer
                   /*          JFrame jf = new JFrame();
                             PaintableJPanel jp = new PaintableJPanel();
                             jp.setImage( img );
                             JScrollPane jsp = new JScrollPane( jp );
                             jf.getContentPane().add( jsp );
                             Insets i = jf.getInsets();
                             jf.setBounds( 0, 0, newX, y );
                             jf.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
                             jf.setVisible( true );*/
                   return true;
              * Print the document to the specified PrintService.
              * This method cannot tell if the printing was successful. You must register
              * a PrintJobListener
              * @return false if no PrintService is selected in the dialog, true otherwise
              public boolean printDocument(Doc doc, PrintService ps) throws PrintException {
                   if (ps == null)
                   return false;
                   addAllPrintServiceAttributeListeners(ps);
                   DocPrintJob dpj = ps.createPrintJob();
                   addAllPrintJobListeners(dpj);
                   dpj.print(doc, attributes);
                   return true;
              public PrintService showPrintDialog() {
                   return ServiceUI.printDialog(gc, x, y, services, defaultService, flavor, attributes);
              private void addAllPrintServiceAttributeListeners(PrintService ps) {
                   // add all listeners that are currently added to this object
                   for (int i = 0; i < psalListeners.size(); i++) {
                   PrintServiceAttributeListener p = (PrintServiceAttributeListener) psalListeners.get(i);
                   ps.addPrintServiceAttributeListener(p);
              private void addAllPrintJobListeners(DocPrintJob dpj) {
                   // add all listeners that are currently added to this object
                   for (int i = 0; i < pjlListeners.size(); i++) {
                   PrintJobListener p = (PrintJobListener) pjlListeners.get(i);
                   dpj.addPrintJobListener(p);
              // uncomment this also to print to a JFrame instead of a printer
              /* protected class PaintableJPanel extends JPanel {
                   Image img;
                   protected PaintableJPanel() {
                        super();
                   public void setImage( Image i ) {
                        img = i;
                   public void paint( Graphics g ) {
                        g.drawImage( img, 0, 0, this );
    Thanks
    Ram

    Ram,
    I have had printing problems too a year and a half ago. I used all printing apis of java and I still find that it is something java lacks. Now basically you can try autosense. To check whether your printer is capable of printing the docflavor use this PrintServiceLookup.lookupPrintServices(flavor, aset); . If it lists the printer then he can print the document otherwise he can't. I guess that is why you get the error.
    Regards,
    Kevin

Maybe you are looking for