Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I'm trying to do that by extending BufferedImage to implement the Printable interface like so (a collage of code I found from around the web):</p> <pre><code>package components; import java.awt.image.PixelGrabber; import javax.swing.*; import java.io.*; import java.awt.*; import java.applet.Applet; import javax.imageio.*; import java.awt.Image.*; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; import java.net.*; import java.lang.*; import java.io.*; import java.io.File; import java.lang.Integer; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.RenderingHints; import java.lang.String; import java.io.File; import java.util.Iterator; import javax.imageio.*; import javax.imageio.stream.*; import java.lang.ClassLoader.*; import java.lang.Class; import java.io.*; import javax.print.*; import javax.print.attribute.*; import javax.print.attribute.standard.*; import javax.print.attribute.standard.MediaSize.*; import javax.print.event.*; import java.awt.MediaTracker; import java.awt.Color; import java.awt.*; import java.awt.print.*; import javax.print.attribute.*; import javax.swing.UIManager; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; import java.util.Hashtable; import java.awt.image.IndexColorModel; import java.awt.print.Printable.*; import java.awt.Rectangle; import java.awt.Graphics2D; public class printableBufferedImage extends BufferedImage implements Printable { public printableBufferedImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, Hashtable properties) { super(cm, raster, isRasterPremultiplied, properties); } public printableBufferedImage(int width, int height, int imageType) { super(width, height, imageType); } public printableBufferedImage(int width, int height, int imageType, IndexColorModel cm) { super(width, height, imageType, cm); } public int print(Graphics g, PageFormat pf, int page) throws PrinterException { Graphics2D g2d = (Graphics2D) g; if (page &gt; 0) { /* We have only one page, and 'page' is zero-based */ return NO_SUCH_PAGE; } /* User (0,0) is typically outside the imageable area, so we must * translate by the X and Y values in the PageFormat to avoid clipping */ try { g2d.setClip(0,0,2100,3300); g2d.drawImage(this, 225, 0,null); g2d.drawImage(this,225, 1550,null); } catch(Exception exc) { } /* tell the caller that this page is part of the printed document */ //return NO_SUCH_PAGE; return PAGE_EXISTS; } public BufferedImage resizeOurImageFromImage(BufferedImage OurImage, int targetWidth, int targetHeight) throws Exception { double tempWidth, tempHeight; int w,h,type; Boolean OurImageHasAlpha; OurImageHasAlpha = OurImage.getColorModel().hasAlpha(); if(OurImageHasAlpha) { type = BufferedImage.TYPE_INT_ARGB; } else { type = BufferedImage.TYPE_INT_RGB; } w = OurImage.getWidth(); h = OurImage.getHeight(); if((targetWidth == 0) &amp;&amp; (targetHeight != 0)) { targetWidth = (targetHeight * w) / h; } else { if((targetHeight == 0) &amp;&amp; (targetWidth != 0)) { targetHeight = (targetWidth * h) / w; } } if((targetHeight == 0) || (targetWidth == 0)) { throw(new Exception("In the Resize Image module with one dimension still zero after trying proportion")); } do { if(w &gt; targetWidth) { tempWidth = ((double) w)/1.2; if (tempWidth &lt; (double) targetWidth) { w = targetWidth; } else { w = (int) java.lang.Math.round(tempWidth + 0.49); } } else { w = targetWidth; } if(h &gt; targetHeight) { tempHeight = ((double) h)/1.2; if (tempHeight &lt; (double) targetHeight) { h = targetHeight; } else { h = (int) java.lang.Math.round(tempHeight + 0.49); } } else { h = targetHeight; } BufferedImage tmp = new BufferedImage(w, h, type); Graphics2D g2 = tmp.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.drawImage(OurImage, 0, 0, w, h, null); g2.dispose(); OurImage = tmp; } while ((targetHeight != h) || (targetWidth != w)); return OurImage; } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload