I want to print a JPanel with a lot of JTextField's and some JLabels.
Therefor I created a BufferedImage of the JPanel and tried to print
it. The problem is that the resolution of the print is really bad
because when creating the BufferedImage the resolution of the screen
is used and not the printer-resolution!
My question: Is it possible to print the image with a resolution of
600dpi or higher?
The original image is to big for one page so I have to create
subimages via BufferedImage.getSubImage():
The source of the print-method:
public int print(Graphics gra, PageFormat pageFormat, int pageIndex)
throws PrinterException
{
mybuf = new BufferedImage((int) getSize().getWidth(),
(int) getSize().getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D bufGraphics = mybuf.createGraphics();
paint(bufGraphics);
Graphics2D graphics = (Graphics2D) gra;
.
.
.
subImage = mybuf.getSubimage((int) ((positionForWidth) *
width), (int)
(positionForHeight * height), width, height);
.
.
.
graphics.drawImage(subImage, 0, 0, null);
return PAGE_EXISTS;
}
else
{
return NO_SUCH_PAGE;
}
I would be really great if someone is able to help!
Thank you very much
André
> Therefor I created a BufferedImage of the JPanel and tried to print
> it. The problem is that the resolution of the print is really bad
> because when creating the BufferedImage the resolution of the screen
> is used and not the printer-resolution!
>
> My question: Is it possible to print the image with a resolution of
> 600dpi or higher?
I lost a little bit track of all the printing APIs in Java (1.4 got yet
another one, so we are up to three or four different printing APIs :-
((().
If you use java.awt.print, the easiest is to disable double buffering
of the JPanel. And directly use the paint method of the JPanel in
Printable.print(). To get the desired parts of the JPanel, you should
transform the Graphics2D object, and leave the cutoff to the cliping.
Hello,
Thank,s
The problem is that I have to print the panel on several pages. I'm
not allowed to resize it! Therefor I have to create subimages! So any
idea how to do that with your approach?
The other thing is, that when I'm trying the paint(), or
paintAll()-Method the text within the JTextFields is really bad
printed
Cheers
André
What Harald was saying was not to resize the Panel. When printing the
panel onto a Graphics surface, you can set an Affine transform (that
does only a translation) on the Graphics object. For printing the panel
on several pages, you need to change only the translation parameters of
this transform for each page so that the appropriate portion of the
panel gets printed to the Graphics object. (You can also set a clip on
the Graphics object to make sure that the actual painting takes place
only on the printable portion of the paper - but I think it is already
setup that way by default).
By the way, while printing it is better to call the print() method of
the component instead of the paint() method. The default "print()"
method implementation in JComponent performs some magic that turns off
the Swing double-buffering, and then delegates the actual task to the
paint method.
BK
Thank's for,
do you have a few lines of code to see what to do?
Would be really nice!!