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