Printing of the image display area is to small to read on some large displays
Need to restrict the image resizing in generating the print output to a minimum size (to allow it to be readable) and allow the printed output to flow into a multiple pages wide by multiple pages in length if necessary. Currently it is restricted to one page.
below is the code
{
public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex != 0)
return NO_SUCH_PAGE;
Graphics2D g2d = (Graphics2D) g;
Rectangle2D.Double printBounds = new Rectangle2D.Double(
pageFormat.getImageableX(),
pageFormat.getImageableY(),
pageFormat.getImageableWidth(),
pageFormat.getImageableHeight()
);
// Print the header and reduce the height for printing
float headerHeight = printHeader(printBounds, g2d);
printBounds.y += headerHeight;
printBounds.height -= headerHeight;
// Carve off the amount of space needed for the footer
printBounds.height -= getFooterHeight(g2d);
// Print the nodes and edges
printDisplay( printBounds, g2d, 0 );
if (footer != null) {
printBounds.y += (printBounds.height + 15);
printFooter(printBounds, g2d);
}
return PAGE_EXISTS;
}
}
=================================
{
protected void printDisplay( Rectangle2D.Double printBounds, Graphics2D g2d, double margin ) {
// Get a rectangle that represents the bounds of all of the DisplayEntities
Rectangle r = null;
for (Enumeration e=displayManager.getEntitySet().getEntityEnumerati on();e.hasMoreElements() {
DisplayEntity de = (DisplayEntity)e.nextElement();
if (r == null)
r = de.getBounds();
else
r = r.union(de.getBounds());
}
// Get that as doubles, rather than ints, and expand by half the margin
// height in all directions
Rectangle2D.Double entityBounds = new Rectangle2D.Double(r.x,r.y,r.width,r.height);
entityBounds.x -= margin/2;
entityBounds.y -= margin/2;
entityBounds.width += margin;
entityBounds.height += margin;
// See if height and/or width was specified
Unit specifiedSize = configuration.getHeight();
double printHeight = (specifiedSize != null) ?
specifiedSize.getValueAsPixels((int)printBounds.he ight) :
printBounds.height;
specifiedSize = configuration.getWidth();
double printWidth = (specifiedSize != null) ?
specifiedSize.getValueAsPixels((int)printBounds.wi dth) :
printBounds.width;
// Figure out the ratio of print-bounds to the entities' bounds
double scaleX = 1;
double scaleY = 1;
// See if we need to scale
boolean canExpand = configuration.expandToFit();
boolean canShrink = configuration.shrinkToFit();
if (canExpand == false && canShrink == false) {
scaleX = scaleY = configuration.getScale();
}
else {
if ((canShrink && canExpand) ||
(canShrink &&
(entityBounds.width > printWidth ||
entityBounds.height > printHeight)) ||
(canExpand &&
(entityBounds.width < printWidth ||
entityBounds.height < printHeight))) {
scaleX = printWidth / entityBounds.width;
scaleY = printHeight / entityBounds.height;
}
}
if (configuration.maintainAspectRatio()) { // Scale the same
if (scaleX > scaleY)
scaleX = scaleY;
else
scaleY = scaleX;
}
}
above methods am using for printing image. but in large display i cant able to read letters.
Thanks in advance
Srini