-
Bug
-
Resolution: Fixed
-
P4
-
1.2.2, 1.3.0
-
beta
-
generic, x86
-
generic, windows_nt
printTab extends printerObject
{
static int tab_width = 0;
int tab_dist;
Font tabFnt;
public printTab(Font tbFont, int tabdist)
{
tabFnt = tbFont;
tab_dist = tabdist;
}
public void draw(Graphics g, Point p)
{
if (tab_width == 0)
tab_width =
g.getFontMetrics(tabFnt).stringWidth("W");
if (p.x < (tab_dist*tab_width))
{
p.x = tab_dist * tab_width;
}
}
}
(Review ID: 105657)
======================================================================
I tried running an appln. in windows95 with Lexmark PCL driver
The printer details are as follows:
PrinterName: Lexmark PCL
DriverName : LMPCL5C.DRV
Driver Version : 4.00
Data Format : RAW
The printjob is spooled but there is no printout. Infact the
whole appln. hangs and even ctrl-C doesn't work. To exit out of the appln. one has to do a ctrl-alt-del. The behaviour with this driver is not very consistent. It sometimes crashes the VM too.
I am attaching a testcase - ImageFormat which could be used to reproduce the bug. This has a gif and a jpg to be printed in Landscape and Portrait mode.
Along with this behaviour there is also an IllegalArgumentException(not always!!) thrown as follows:
java.lang.IllegalArgumentException: Invalid ColorModel
at sun.java2d.loops.DefaultComponent.IntRgbTo8bitDithered(Native Method)
at sun.java2d.loops.IntRgbTo8bit.OpaqueBlit(DefaultComponent.java:1558)
at sun.java2d.loops.RasterOutputManager.performOpaqueBlit(RasterOutputMa
nager.java:1039)
at sun.java2d.loops.RasterOutputManager.compositeSrcDst(RasterOutputMana
ger.java:672)
at sun.java2d.loops.RasterOutputManager.renderImage(RasterOutputManager.
java:478)
at sun.java2d.SunGraphics2D.renderingPipeImage(SunGraphics2D.java:2057)
at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:1616)
at sun.awt.windows.WGraphics.drawImage(WGraphics.java:438)
at sun.awt.image.ImageRepresentation.drawToBufImage(ImageRepresentation.
java:720)
at sun.awt.windows.WGraphics.drawImage(WGraphics.java:393)
at sun.awt.windows.WPrintGraphicsWrapper.drawImage(WPrintGraphicsWrapper
.java:355)
at DisplayImages.paint(ImageFormatTest.java:217)
at java.awt.Component.print(Component.java:2143)
at sun.awt.windows.WComponentPeer.print(WComponentPeer.java:158)
at sun.awt.windows.WCanvasPeer.print(WCanvasPeer.java:81)
at java.awt.GraphicsCallback$PeerPrintCallback.run(GraphicsCallback.java
:91)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
58)
at java.awt.Component.printAll(Component.java:2159)
at sun.awt.SunGraphicsCallback$PrintHeavyweightComponentsCallback.run(Su
nGraphicsCallback.java:128)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
58)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:95
)
at sun.awt.windows.WPanelPeer.print(WPanelPeer.java:34)
at java.awt.GraphicsCallback$PeerPrintCallback.run(GraphicsCallback.java
:91)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
58)
at java.awt.Component.printAll(Component.java:2159)
at ImageFormatTest.actionPerformed(ImageFormatTest.java:171)
at java.awt.Button.processActionEvent(Button.java:333)
at java.awt.Button.processEvent(Button.java:306)
at java.awt.Component.dispatchEventImpl(Component.java:2593)
at java.awt.Component.dispatchEvent(Component.java:2496)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:320)
at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:10
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:97)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:88)
With the PostScript - the working is fine.
Printing without the usage of JobAttributes and PageAttributes in jdk1.2.2-W is fine.
Printing in kestrel-beta(jdk1.3-O) using the JobAttributes and PageAttributes - again results in application hanging.
****************
The same behaviour is exhibited in jdk1.3.0-M build too.
###@###.### 1999-10-28
****************
The printing is fine in winNT with Lexmark Printer using PCL drivers
###@###.### 1999-11-01
*****************
The application hangs in win95 in tje jdk1.3.0N build too.
Further information on driver installed:
Details of the PCL printer:
---------------------------
Printer Model - Lexmark Optra S 1855
Driver Name - LMPCL5C.DRV
Driver version - 4.00
Color Support - NO
Port Name - \\PC-CUP03\redstar
Data Format - RAW
Files Used by this driver:
lmpcl5c.drv (0.99.6.23)
lmpcl5cx.dll (0.99.6.23)
lmpcl5cc.dll (0.99.6.23)
lmpclxc.dll (0.99.6.23)
lmpcl5c.hlp
lmpcl5c$.ini
lexpsext.dll(4.02)
lmpcl5c.inf
lexdrvin.exe(1.11)
ptapiw16.dll(5.50.00.00)
ptzipw32.dll(5.50.00.00)
lmdrv#.zip
lexlmpm.dll(96,04,90,90)
lexbce.dl_ (4,90,00,00)
lexbces.ex_ (4,90,00,00)
lexstart.ex_ (96,04,90,90)
lmpclthk.dll
LexxURL.tpl
lmpclpp.dll (1,0,1,0)
lmstatus.exe(0.99.6.23)
These files are in windows\system.
###@###.### 1999-11-08
Name: skT45625 Date: 06/07/2000
when printing AWT style graphics on HP DeskJet 660
Exception occurred during event dispatching:
java.lang.IllegalArgumentException: Invalid ColorModel
at sun.java2d.loops.DefaultComponent.IntRgbTo8bitDithered(Native Method)
at sun.java2d.loops.IntRgbTo8bit.OpaqueBlit(DefaultComponent.java:1560)
at sun.java2d.loops.RasterOutputManager.performOpaqueBlit
(RasterOutputManager.java:1129)
at sun.java2d.loops.RasterOutputManager.compositeSrcDst
(RasterOutputManager.java:762)
at sun.java2d.loops.RasterOutputManager.renderImage
(RasterOutputManager.java:506)
at sun.java2d.SunGraphics2D.renderingPipeImage(SunGraphics2D.java:2068)
at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:1627)
at sun.awt.windows.WGraphics.drawImage(WGraphics.java:532)
at sun.awt.image.ImageRepresentation.drawToBufImage
(ImageRepresentation.java:720)
at sun.awt.windows.WGraphics.drawImage(WGraphics.java:487)
at sun.awt.windows.WPrintGraphicsWrapper.drawImage
(WPrintGraphicsWrapper.java:351)
at AttributesV.drawComponent6(AttributesV.java:414)
at AttributesV.drawComponent(AttributesV.java:229)
at AttributesV.printComponent(AttributesV.java:727)
at AttributesV.actionPerformed(AttributesV.java:663)
at javax.swing.AbstractButton.fireActionPerformed
(AbstractButton.java:1450)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed
(AbstractButton.java:1504)
at javax.swing.DefaultButtonModel.fireActionPerformed
(DefaultButtonModel.java:384)
at javax.swing.DefaultButtonModel.setPressed
(DefaultButtonModel.java:256)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased
(BasicButtonListener.java:216)
at java.awt.Component.processMouseEvent(Component.java:3733)
at java.awt.Component.processEvent(Component.java:3562)
at java.awt.Container.processEvent(Container.java:1173)
at java.awt.Component.dispatchEventImpl(Component.java:2611)
at java.awt.Container.dispatchEventImpl(Container.java:1222)
at java.awt.Component.dispatchEvent(Component.java:2515)
at java.awt.LightweightDispatcher.retargetMouseEvent
(Container.java:2465)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2230)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2139)
at java.awt.Container.dispatchEventImpl(Container.java:1209)
at java.awt.Window.dispatchEventImpl(Window.java:923)
at java.awt.Component.dispatchEvent(Component.java:2515)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:401)
at java.awt.EventDispatchThread.pumpOneEvent
(EventDispatchThread.java:109)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:99)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
printing AWT style on 1.2 + on an HP 660 causes an excaption, works ok on an
epson 640.
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class printing extends Frame
implements ActionListener, WindowListener
{
Button b, show;
Printer printer;
static boolean imagesloaded = false;
Image image1;
//--
public printing()
{
super("print test"); //frame title;
addWindowListener(this);
ScrollPane scroller = new ScrollPane();
Panel p = new Panel(); //spaces buttons
// scroller.add( p);
add (scroller);
add("South", p);
b = new Button("Print"); //2 buttons
p.add("South", b);
b.addActionListener(this);
show = new Button("Show");
p.add(show);
show.addActionListener(this);
scroller.add( printer = new Printer(this)); //printer added
// scroller.setSize( 14000,14000);
scroller.setSize( 800,2400);
add(scroller, "Center");
pack();
// setBounds(100,100,200,200);
setBounds(100,100,600,600);
setVisible(true);
//loadStrings(); //do printing here
}
//--
private void loadStrings(boolean printit)
{
//puts the text into the Printer object
int i = 1;
int j =0;
if(!imagesloaded)
{
System.out.println("load the images");
image1 = getToolkit().getImage("pcmlogo1.gif");
imagesloaded=true;
}
printer.printImage( image1);
if(printit)
printer.newPage(); //print on page
}
//--
public void actionPerformed(ActionEvent ev)
{
Object obj = ev.getSource();
if (obj == b)
{
loadStrings(true); //do printing here
printer.endJob();
}
if (obj == show)
{
loadStrings(false);
showPreview(); //or on screen
}
}
//--
private void showPreview()
{
Dimension d = printer.pageSize();
// setBounds(100 , 100, 100,100);
// setBounds(100 , 100, d.width, d.height);
printer.setBounds(100,100, d.width, d.height);
show();
repaint();
printer.setVisible(true);
}
//--
static public void main(String argv[])
{
new printing();
}
//--
public void windowClosing(WindowEvent wEvt)
{
System.exit(0); //exit on System exit box clicked
}
public void windowClosed(WindowEvent wEvt){}
public void windowOpened(WindowEvent wEvt){}
public void windowIconified(WindowEvent wEvt){}
public void windowDeiconified(WindowEvent wEvt){}
public void windowActivated(WindowEvent wEvt){}
public void windowDeactivated(WindowEvent wEvt){}
}
//===============================================
class Printer extends Canvas
{
Frame f; //parent frame
PrintJob pjob; //printjob object
Graphics pg; //printer graphics handle
Vector objects; //array of printer instructions
Point pt; //current printer position
Font fnt; //current font
Font tabFont; //font to use in tab calcns
public Printer(Frame frm)
{
f = frm; //save form
f.add(this); //add this object to form
setVisible(false);//but do not show it
pjob = null; //no print job yet
pt =new Point( 100, 100); //initialize print posn
objects = new Vector(); //and print objects
tabFont = new Font("MonoSpaced", Font.PLAIN, 12);
fnt = new Font("SansSerif", Font.PLAIN, 12);
}
//--
public void setFont(Font f)
{
objects.addElement(new printFont(f));
}
//--
public void print(String s)
{
objects.addElement(new printString(s));
}
//--
public void println(String s)
{
print(s);
objects.addElement(new newLine());
}
public void printO ( Point p)
{
objects.addElement(new printOval(p));
}
public void printImage (Image i)
{
objects.addElement(new printImage(i));
}
//--
public void newPage()
{
if (pjob == null ) {
// This code is to use the java dialog box
//JobAttributes jobAtt = new JobAttributes();
//jobAtt.setDefaultSelection(JobAttributes.DefaultSelectionType.SELECTION);
//jobAtt.setDialog(JobAttributes.DialogType.COMMON);
//PageAttributes pageAtt = new PageAttributes();
//pjob = Toolkit.getDefaultToolkit().getPrintJob(f, "Printing Test", jobAtt,
pageAtt);
// output the printer job
// props.list(System.out);
pjob = getToolkit().getPrintJob(f, "Printer", null);
System.out.println(getToolkit().getColorModel());
}
pg = pjob.getGraphics();
print(pg);
pg.dispose();
pt =new Point( 100, 100); //initialize print position
objects= null;
objects = new Vector(); //and print objects
}
//--
public void finalize()
{
// if (objects.size() > 0)
// newPage(true);
endJob();
}
//--
public void endJob()
{
pjob.end();
pjob = null;
}
//--
public void tab(int tabstop)
{
objects.addElement(new printTab(tabFont, tabstop));
}
//--
public Dimension pageSize()
{
if (pjob == null)
// return new Dimension(620, 790);
return new Dimension(800,2400);
else
{
pjob = getToolkit().getPrintJob(f, "Printer", null);
// return new Dimension(800,2400);
return pjob.getPageDimension();
}
}
//--
public void paint(Graphics g)
{
pt = new Point(100,100);
print(g); //displays text as preview
}
//--
public void print(Graphics g)
{
printerObject p;
f.setFont(fnt); //always start with some font
for (int i = 0; i < objects.size(); i ++)
{
p = (printerObject)objects.elementAt(i);
p.draw(g, pt);
}
}
} //end class
//===================================================
abstract class printerObject
{
abstract void draw(Graphics g, Point p);
}
//===================================================
class newLine extends printerObject
{
//--
public void draw(Graphics g, Point p)
{
p.x = 0;
p.y += g.getFontMetrics(g.getFont()).getHeight();
}
}
//=====================================================
class printString extends printerObject
{
String st;
public printString(String s)
{
st = s;
}
//--
public void draw(Graphics g, Point p)
{
g.drawString(st, p.x, p.y);
p.x += g.getFontMetrics(g.getFont()).stringWidth(st);
}
}
class printOval extends printerObject
{
Point pt1;
public printOval(Point p)
{
pt1 = p;
}
//--
public void draw(Graphics g, Point p)
{
g.setColor(Color.red);
g.fillOval(p.x, p.y,pt1.x,pt1.y);
p.x =0 ;
p.y +=pt1.y+20;
g.setColor(Color.black);
}
}
class printImage extends printerObject
{
Image aImage;
static boolean once=false;
public printImage(Image i)
{
aImage = i;
once=false;
}
//--
public void draw(Graphics g, Point p)
{
int imagewidth=aImage.getWidth(null);
int imageheight=aImage.getHeight(null);
g.drawImage(aImage, p.x, p.y,imagewidth,imageheight, null );
// System.out.println("point = " + p);
p.x = 0 ;
p.y = p.y + imageheight + 20;
//System.out.println("point = " + p);
}
}
//===================================================
class printFont extends printerObject
{
Font fnt;
static boolean dumpfont=true;
public printFont(Font f)
{
fnt = f;
}
//--
public void draw(Graphics g, Point p)
{
g.setFont(fnt);
if(dumpfont)
{
System.out.println( g.getFont());
dumpfont=false;
}
if (p.y <= 0)
{
p.y = g.getFontMetrics(fnt).getHeight();
}
}
}
//===================================================
class
{
static int tab_width = 0;
int tab_dist;
Font tabFnt;
public printTab(Font tbFont, int tabdist)
{
tabFnt = tbFont;
tab_dist = tabdist;
}
public void draw(Graphics g, Point p)
{
if (tab_width == 0)
tab_width =
g.getFontMetrics(tabFnt).stringWidth("W");
if (p.x < (tab_dist*tab_width))
{
p.x = tab_dist * tab_width;
}
}
}
(Review ID: 105657)
======================================================================
I tried running an appln. in windows95 with Lexmark PCL driver
The printer details are as follows:
PrinterName: Lexmark PCL
DriverName : LMPCL5C.DRV
Driver Version : 4.00
Data Format : RAW
The printjob is spooled but there is no printout. Infact the
whole appln. hangs and even ctrl-C doesn't work. To exit out of the appln. one has to do a ctrl-alt-del. The behaviour with this driver is not very consistent. It sometimes crashes the VM too.
I am attaching a testcase - ImageFormat which could be used to reproduce the bug. This has a gif and a jpg to be printed in Landscape and Portrait mode.
Along with this behaviour there is also an IllegalArgumentException(not always!!) thrown as follows:
java.lang.IllegalArgumentException: Invalid ColorModel
at sun.java2d.loops.DefaultComponent.IntRgbTo8bitDithered(Native Method)
at sun.java2d.loops.IntRgbTo8bit.OpaqueBlit(DefaultComponent.java:1558)
at sun.java2d.loops.RasterOutputManager.performOpaqueBlit(RasterOutputMa
nager.java:1039)
at sun.java2d.loops.RasterOutputManager.compositeSrcDst(RasterOutputMana
ger.java:672)
at sun.java2d.loops.RasterOutputManager.renderImage(RasterOutputManager.
java:478)
at sun.java2d.SunGraphics2D.renderingPipeImage(SunGraphics2D.java:2057)
at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:1616)
at sun.awt.windows.WGraphics.drawImage(WGraphics.java:438)
at sun.awt.image.ImageRepresentation.drawToBufImage(ImageRepresentation.
java:720)
at sun.awt.windows.WGraphics.drawImage(WGraphics.java:393)
at sun.awt.windows.WPrintGraphicsWrapper.drawImage(WPrintGraphicsWrapper
.java:355)
at DisplayImages.paint(ImageFormatTest.java:217)
at java.awt.Component.print(Component.java:2143)
at sun.awt.windows.WComponentPeer.print(WComponentPeer.java:158)
at sun.awt.windows.WCanvasPeer.print(WCanvasPeer.java:81)
at java.awt.GraphicsCallback$PeerPrintCallback.run(GraphicsCallback.java
:91)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
58)
at java.awt.Component.printAll(Component.java:2159)
at sun.awt.SunGraphicsCallback$PrintHeavyweightComponentsCallback.run(Su
nGraphicsCallback.java:128)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
58)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:95
)
at sun.awt.windows.WPanelPeer.print(WPanelPeer.java:34)
at java.awt.GraphicsCallback$PeerPrintCallback.run(GraphicsCallback.java
:91)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
58)
at java.awt.Component.printAll(Component.java:2159)
at ImageFormatTest.actionPerformed(ImageFormatTest.java:171)
at java.awt.Button.processActionEvent(Button.java:333)
at java.awt.Button.processEvent(Button.java:306)
at java.awt.Component.dispatchEventImpl(Component.java:2593)
at java.awt.Component.dispatchEvent(Component.java:2496)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:320)
at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:10
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:97)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:88)
With the PostScript - the working is fine.
Printing without the usage of JobAttributes and PageAttributes in jdk1.2.2-W is fine.
Printing in kestrel-beta(jdk1.3-O) using the JobAttributes and PageAttributes - again results in application hanging.
****************
The same behaviour is exhibited in jdk1.3.0-M build too.
###@###.### 1999-10-28
****************
The printing is fine in winNT with Lexmark Printer using PCL drivers
###@###.### 1999-11-01
*****************
The application hangs in win95 in tje jdk1.3.0N build too.
Further information on driver installed:
Details of the PCL printer:
---------------------------
Printer Model - Lexmark Optra S 1855
Driver Name - LMPCL5C.DRV
Driver version - 4.00
Color Support - NO
Port Name - \\PC-CUP03\redstar
Data Format - RAW
Files Used by this driver:
lmpcl5c.drv (0.99.6.23)
lmpcl5cx.dll (0.99.6.23)
lmpcl5cc.dll (0.99.6.23)
lmpclxc.dll (0.99.6.23)
lmpcl5c.hlp
lmpcl5c$.ini
lexpsext.dll(4.02)
lmpcl5c.inf
lexdrvin.exe(1.11)
ptapiw16.dll(5.50.00.00)
ptzipw32.dll(5.50.00.00)
lmdrv#.zip
lexlmpm.dll(96,04,90,90)
lexbce.dl_ (4,90,00,00)
lexbces.ex_ (4,90,00,00)
lexstart.ex_ (96,04,90,90)
lmpclthk.dll
LexxURL.tpl
lmpclpp.dll (1,0,1,0)
lmstatus.exe(0.99.6.23)
These files are in windows\system.
###@###.### 1999-11-08
Name: skT45625 Date: 06/07/2000
when printing AWT style graphics on HP DeskJet 660
Exception occurred during event dispatching:
java.lang.IllegalArgumentException: Invalid ColorModel
at sun.java2d.loops.DefaultComponent.IntRgbTo8bitDithered(Native Method)
at sun.java2d.loops.IntRgbTo8bit.OpaqueBlit(DefaultComponent.java:1560)
at sun.java2d.loops.RasterOutputManager.performOpaqueBlit
(RasterOutputManager.java:1129)
at sun.java2d.loops.RasterOutputManager.compositeSrcDst
(RasterOutputManager.java:762)
at sun.java2d.loops.RasterOutputManager.renderImage
(RasterOutputManager.java:506)
at sun.java2d.SunGraphics2D.renderingPipeImage(SunGraphics2D.java:2068)
at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:1627)
at sun.awt.windows.WGraphics.drawImage(WGraphics.java:532)
at sun.awt.image.ImageRepresentation.drawToBufImage
(ImageRepresentation.java:720)
at sun.awt.windows.WGraphics.drawImage(WGraphics.java:487)
at sun.awt.windows.WPrintGraphicsWrapper.drawImage
(WPrintGraphicsWrapper.java:351)
at AttributesV.drawComponent6(AttributesV.java:414)
at AttributesV.drawComponent(AttributesV.java:229)
at AttributesV.printComponent(AttributesV.java:727)
at AttributesV.actionPerformed(AttributesV.java:663)
at javax.swing.AbstractButton.fireActionPerformed
(AbstractButton.java:1450)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed
(AbstractButton.java:1504)
at javax.swing.DefaultButtonModel.fireActionPerformed
(DefaultButtonModel.java:384)
at javax.swing.DefaultButtonModel.setPressed
(DefaultButtonModel.java:256)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased
(BasicButtonListener.java:216)
at java.awt.Component.processMouseEvent(Component.java:3733)
at java.awt.Component.processEvent(Component.java:3562)
at java.awt.Container.processEvent(Container.java:1173)
at java.awt.Component.dispatchEventImpl(Component.java:2611)
at java.awt.Container.dispatchEventImpl(Container.java:1222)
at java.awt.Component.dispatchEvent(Component.java:2515)
at java.awt.LightweightDispatcher.retargetMouseEvent
(Container.java:2465)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2230)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2139)
at java.awt.Container.dispatchEventImpl(Container.java:1209)
at java.awt.Window.dispatchEventImpl(Window.java:923)
at java.awt.Component.dispatchEvent(Component.java:2515)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:401)
at java.awt.EventDispatchThread.pumpOneEvent
(EventDispatchThread.java:109)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:99)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
printing AWT style on 1.2 + on an HP 660 causes an excaption, works ok on an
epson 640.
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class printing extends Frame
implements ActionListener, WindowListener
{
Button b, show;
Printer printer;
static boolean imagesloaded = false;
Image image1;
//--
public printing()
{
super("print test"); //frame title;
addWindowListener(this);
ScrollPane scroller = new ScrollPane();
Panel p = new Panel(); //spaces buttons
// scroller.add( p);
add (scroller);
add("South", p);
b = new Button("Print"); //2 buttons
p.add("South", b);
b.addActionListener(this);
show = new Button("Show");
p.add(show);
show.addActionListener(this);
scroller.add( printer = new Printer(this)); //printer added
// scroller.setSize( 14000,14000);
scroller.setSize( 800,2400);
add(scroller, "Center");
pack();
// setBounds(100,100,200,200);
setBounds(100,100,600,600);
setVisible(true);
//loadStrings(); //do printing here
}
//--
private void loadStrings(boolean printit)
{
//puts the text into the Printer object
int i = 1;
int j =0;
if(!imagesloaded)
{
System.out.println("load the images");
image1 = getToolkit().getImage("pcmlogo1.gif");
imagesloaded=true;
}
printer.printImage( image1);
if(printit)
printer.newPage(); //print on page
}
//--
public void actionPerformed(ActionEvent ev)
{
Object obj = ev.getSource();
if (obj == b)
{
loadStrings(true); //do printing here
printer.endJob();
}
if (obj == show)
{
loadStrings(false);
showPreview(); //or on screen
}
}
//--
private void showPreview()
{
Dimension d = printer.pageSize();
// setBounds(100 , 100, 100,100);
// setBounds(100 , 100, d.width, d.height);
printer.setBounds(100,100, d.width, d.height);
show();
repaint();
printer.setVisible(true);
}
//--
static public void main(String argv[])
{
new printing();
}
//--
public void windowClosing(WindowEvent wEvt)
{
System.exit(0); //exit on System exit box clicked
}
public void windowClosed(WindowEvent wEvt){}
public void windowOpened(WindowEvent wEvt){}
public void windowIconified(WindowEvent wEvt){}
public void windowDeiconified(WindowEvent wEvt){}
public void windowActivated(WindowEvent wEvt){}
public void windowDeactivated(WindowEvent wEvt){}
}
//===============================================
class Printer extends Canvas
{
Frame f; //parent frame
PrintJob pjob; //printjob object
Graphics pg; //printer graphics handle
Vector objects; //array of printer instructions
Point pt; //current printer position
Font fnt; //current font
Font tabFont; //font to use in tab calcns
public Printer(Frame frm)
{
f = frm; //save form
f.add(this); //add this object to form
setVisible(false);//but do not show it
pjob = null; //no print job yet
pt =new Point( 100, 100); //initialize print posn
objects = new Vector(); //and print objects
tabFont = new Font("MonoSpaced", Font.PLAIN, 12);
fnt = new Font("SansSerif", Font.PLAIN, 12);
}
//--
public void setFont(Font f)
{
objects.addElement(new printFont(f));
}
//--
public void print(String s)
{
objects.addElement(new printString(s));
}
//--
public void println(String s)
{
print(s);
objects.addElement(new newLine());
}
public void printO ( Point p)
{
objects.addElement(new printOval(p));
}
public void printImage (Image i)
{
objects.addElement(new printImage(i));
}
//--
public void newPage()
{
if (pjob == null ) {
// This code is to use the java dialog box
//JobAttributes jobAtt = new JobAttributes();
//jobAtt.setDefaultSelection(JobAttributes.DefaultSelectionType.SELECTION);
//jobAtt.setDialog(JobAttributes.DialogType.COMMON);
//PageAttributes pageAtt = new PageAttributes();
//pjob = Toolkit.getDefaultToolkit().getPrintJob(f, "Printing Test", jobAtt,
pageAtt);
// output the printer job
// props.list(System.out);
pjob = getToolkit().getPrintJob(f, "Printer", null);
System.out.println(getToolkit().getColorModel());
}
pg = pjob.getGraphics();
print(pg);
pg.dispose();
pt =new Point( 100, 100); //initialize print position
objects= null;
objects = new Vector(); //and print objects
}
//--
public void finalize()
{
// if (objects.size() > 0)
// newPage(true);
endJob();
}
//--
public void endJob()
{
pjob.end();
pjob = null;
}
//--
public void tab(int tabstop)
{
objects.addElement(new printTab(tabFont, tabstop));
}
//--
public Dimension pageSize()
{
if (pjob == null)
// return new Dimension(620, 790);
return new Dimension(800,2400);
else
{
pjob = getToolkit().getPrintJob(f, "Printer", null);
// return new Dimension(800,2400);
return pjob.getPageDimension();
}
}
//--
public void paint(Graphics g)
{
pt = new Point(100,100);
print(g); //displays text as preview
}
//--
public void print(Graphics g)
{
printerObject p;
f.setFont(fnt); //always start with some font
for (int i = 0; i < objects.size(); i ++)
{
p = (printerObject)objects.elementAt(i);
p.draw(g, pt);
}
}
} //end class
//===================================================
abstract class printerObject
{
abstract void draw(Graphics g, Point p);
}
//===================================================
class newLine extends printerObject
{
//--
public void draw(Graphics g, Point p)
{
p.x = 0;
p.y += g.getFontMetrics(g.getFont()).getHeight();
}
}
//=====================================================
class printString extends printerObject
{
String st;
public printString(String s)
{
st = s;
}
//--
public void draw(Graphics g, Point p)
{
g.drawString(st, p.x, p.y);
p.x += g.getFontMetrics(g.getFont()).stringWidth(st);
}
}
class printOval extends printerObject
{
Point pt1;
public printOval(Point p)
{
pt1 = p;
}
//--
public void draw(Graphics g, Point p)
{
g.setColor(Color.red);
g.fillOval(p.x, p.y,pt1.x,pt1.y);
p.x =0 ;
p.y +=pt1.y+20;
g.setColor(Color.black);
}
}
class printImage extends printerObject
{
Image aImage;
static boolean once=false;
public printImage(Image i)
{
aImage = i;
once=false;
}
//--
public void draw(Graphics g, Point p)
{
int imagewidth=aImage.getWidth(null);
int imageheight=aImage.getHeight(null);
g.drawImage(aImage, p.x, p.y,imagewidth,imageheight, null );
// System.out.println("point = " + p);
p.x = 0 ;
p.y = p.y + imageheight + 20;
//System.out.println("point = " + p);
}
}
//===================================================
class printFont extends printerObject
{
Font fnt;
static boolean dumpfont=true;
public printFont(Font f)
{
fnt = f;
}
//--
public void draw(Graphics g, Point p)
{
g.setFont(fnt);
if(dumpfont)
{
System.out.println( g.getFont());
dumpfont=false;
}
if (p.y <= 0)
{
p.y = g.getFontMetrics(fnt).getHeight();
}
}
}
//===================================================
class