Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / First Aid / January 2006

Tip: Looking for answers? Try searching our database.

Printing Pages

Thread view: 
Hal Vaughan - 25 Jan 2006 16:40 GMT
I've done a lot of searching on printing in Java and a friend and I have
done some testing and we're having problems just printing one page with an
image on it.  The best tutorial we found uses classes that are deprecated.

Can anyone recommend a good printing tutorial or howto for Java to help with
printing a single page with an image on it?  (It can be gif, jpg, bmp,
whatever for the image format.)

Thanks!

Hal
Thomas Weidenfeller - 25 Jan 2006 17:26 GMT
> I've done a lot of searching on printing in Java and a friend and I have
> done some testing and we're having problems just printing one page with an
> image on it.  The best tutorial we found uses classes that are deprecated.

Typically, the API documentation lists what you should use instead.

> Can anyone recommend a good printing tutorial or howto for Java to help with
> printing a single page with an image on it?

Nothing is "good" in the world of Java printing. Three or four (I lost
track) APIs and still no fun. Try

http://java.sun.com/j2se/1.5.0/docs/guide/jps/spec/JPSTOC.fm.html
http://java.sun.com/j2se/1.5.0/docs/guide/jps/spec/printing2d.fm1.html#998764

for a start.

/Thomas
Signature

The comp.lang.java.gui FAQ:
ftp://ftp.cs.uu.nl/pub/NEWS.ANSWERS/computer-lang/java/gui/faq
http://www.uni-giessen.de/faq/archiv/computer-lang.java.gui.faq/

Hal Rosser - 27 Jan 2006 00:40 GMT
> I've done a lot of searching on printing in Java and a friend and I have
> done some testing and we're having problems just printing one page with an
[quoted text clipped - 7 lines]
>
> Hal

I found this code - for printing components
Whatever you can print on a component can go to the printer with this code
Hal Rosser
---------------------------------------
import java.awt.*;
import javax.swing.*;
import java.awt.print.*;

/** 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.
*  <P>
*  If you are going to be printing many times, it is marginally more
*  efficient to first do the following:
*  <PRE>
*    PrintUtilities printHelper = new PrintUtilities(theComponent);
*  </PRE>
*  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() {
   PrinterJob printJob = PrinterJob.getPrinterJob();
   printJob.setPrintable(this);
   if (printJob.printDialog())
     try {
       printJob.print();
     } catch(PrinterException pe) {
       System.out.println("Error printing: " + pe);
     }
 }

 public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
   if (pageIndex > 0) {
     return(NO_SUCH_PAGE);
   } else {
     Graphics2D g2d = (Graphics2D)g;
     g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
     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);
 }
}
Paulus de Boska - 31 Jan 2006 15:49 GMT
Hal,

http://javalessons.com/cgi-bin/ui/java-swing.cgi?1cd=prt&sid=ao789

may help.

---
Paul Hamaker, SEMM
http://javalessons.com


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.