Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 229
  • Last Modified:

Automatic Selection of Printer not working!

According to the instructions that I got from experts exchange earlier, I tried to develop a class file for sending a print option to a particular printer without prompting for selection of printer.  But when I try to press PRINT button an exception is coming and the print out is not appearing.  Please go through the program and suggest a better solution.  My aim is : There are 2-3 printers attached to a particular PC and a particular report print should go to a particular printer without a print dialog box.  

/************************************/
// TestReport.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.print.*;
import java.io.Serializable;
import javax.swing.JEditorPane;
import javax.swing.RepaintManager;
import javax.swing.text.html.*;
import java.text.*;
import java.util.Date;
import java.util.Calendar;
import java.io.*;
import java.util.Iterator;
import javax.imageio.*;
import javax.imageio.stream.ImageInputStream;
import javax.print.*;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import java.awt.image.BufferedImage;
import java.awt.print.*;

public class TestReport extends JFrame implements ActionListener
{
 JPrintableEditPane jtp;
 Container content;
  Date d1,date;
 Calendar calendar;
 int day,month,year;
 JButton printButton, exit;
 String str, str1;
 public TestReport()
{
      setSize(800,550);
    calendar=Calendar.getInstance();
      day  = calendar.get(Calendar.DATE) ;
      month= calendar.get(Calendar.MONTH)+1 ;
      year = calendar.get(Calendar.YEAR);
      String todate=year+"-"+month+"-"+day;
    str="";
str=str+"<HTML><HEAD></HEAD><BODY bgColor=white>";
str=str+"<p><font face=Verdana style=\"font-size: 10pt\">Suresh Babu V. S </font></b>";
str=str+"<p><font face=Verdana style=\"font-size: 10pt\">Trivandrum, India</font></b>";
str=str+"</body></html>";
try
{
      FileWriter f1=new FileWriter("c:\\IO.html");      //Open IO.html file for writing
      for (int i=0;i<str.length();++i)
           f1.write(str.charAt(i));                  f1.close();
}
catch(Exception e)
{System.out.println("Error in writing file"); }
   content = getContentPane();
   printButton = new JButton("Print");
   exit = new JButton ("Close");
   printButton.addActionListener(this);
   exit.addActionListener(this);
   JPanel buttonPanel = new JPanel();
   buttonPanel.setBackground(Color.white);
   buttonPanel.add(printButton);
   buttonPanel.add(exit);
   content.add(buttonPanel, BorderLayout.SOUTH);
   jtp = new JPrintableEditPane();
   jtp.setEditorKit(new HTMLEditorKit());

    try{
    jtp.setPage("file:///c:\\IO.html");
    jtp.setEditable(false);
    JScrollPane editorScrollPane = new JScrollPane(jtp);
      editorScrollPane.setVerticalScrollBarPolicy(
    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
      editorScrollPane.setPreferredSize(new Dimension(250, 145));
content.add(editorScrollPane, BorderLayout.CENTER);    
    }
catch(IOException e){
     System.out.println("Print Error : "+e);
   }
   setVisible(true);
 }

 public void actionPerformed(ActionEvent event) {
   if (event.getSource()==printButton)
   {
DocFlavor flavor = null;//or the flavor you need
HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
 PrintService printServices[] =
      PrintServiceLookup.lookupPrintServices(flavor, null);
   for (int i=0;i<4;i++)
         System.out.println(printServices[i]);
DocPrintJob job = printServices[1].createPrintJob();
Doc doc = new SimpleDoc(jtp, flavor, new HashDocAttributeSet());
try {
             job.print(doc, pras);
      } catch (PrintException ex) {
                ex.printStackTrace();
}
}
  this.hide();
}
public static void main(String args[])
{
      TestReport tr=new TestReport();
}
}

// END OF PROGRAM
0
rupasuraj
Asked:
rupasuraj
  • 2
1 Solution
 
rupasurajAuthor Commented:
Any experts please go through my query and suggest a solution...

Rupa
0
 
gnoonCommented:
try this actionPerformed :)

public void actionPerformed(ActionEvent event) {
        if (event.getSource()==printButton)
        {
            DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
            pras.add(OrientationRequested.LANDSCAPE);
            pras.add(new Copies(1));
            pras.add(new JobName("My job", null));
            PrintService printServices[] =
            PrintServiceLookup.lookupPrintServices(flavor, pras);
            for (int i=0;i<4;i++)
                System.out.println(printServices[i].getName());
            DocPrintJob job = printServices[1].createPrintJob();
            Doc doc = new SimpleDoc(jtp, flavor,null);
            try {
                 job.print(doc, pras);
            } catch (PrintException ex) {
                    ex.printStackTrace();
            }
        }
        this.hide();
}
0
 
gnoonCommented:
sorry, please replace the code

DocPrintJob job = printServices[1].createPrintJob();

with this code

DocPrintJob job = printServices[0].createPrintJob();

-gnoon-
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now